-5
int main(int argc, char* argv[])
{
// opens the memory
FILE* inptr = fopen("card.raw", "r");
if(inptr == NULL)
{
// checks for the availability of the file
printf("Couldn't open card.raw\n");
return 1;
}
char title[7];
int i = 0;
bool start = false;
BYTE* block = malloc(sizeof(BYTE) * 512);
while(fread(block, sizeof(BYTE), 512, inptr) == 512)
{
if(fsign(block) && !start)
{
sprintf(title,"%.3d.jpg" , i);
i++;
FILE* image = fopen(title, "w");
fwrite(block, sizeof(BYTE), 512, image);
fclose(image);
}
else if(!fsign(block) && start)
{
FILE* image = fopen(title, "a");
fwrite(block, sizeof(BYTE), 512, image);
fclose(image);
}
}
fclose(inptr);
free(block);
}
bool fsign(BYTE* block)
{
if(*(block) == 0xff)
{
if(*(block + 1) == 0xd8)
{
if(*(block + 2) == 0xff)
{
if(*(block + 3) >= 0xe0 && *(block + 3) <= 0xef)
{
return true;
}
}
}
}
return false;
私の質問はwhileループにあります。 whileループは3回繰り返し成功し、fread関数は3回の反復のたびにファイルを正常に読み取ります。しかし、3回目の反復では、freadはセグメンテーション違反を引き起こします。なぜそれが起こるかもしれない?セグメンテーションフォールトを引き起こす "fread"関数
これがC++であると思われる場合は、なぜC++のものを使用しないのですか?それがcであると思われる場合は、C++タグ – user463035818
を削除してください。デバッガを使用してコードをステップ実行する方法を学ぶのは正しいです。 –