基本上我正在尝试从文件中读取内容,其中内容存储在 512 字节的块中。我知道为什么会出现分段错误,但由于我不知道 JPEG 文件的大小,所以我不知道我在哪里遇到了问题。调试器在调用 fread 后确实停止了,尽管我不知道它为什么会这样做。
运行调试器时,循环可能会运行 40 多次,然后由于分段错误而崩溃。
这是我目前正在使用的代码:缓冲区已分配大小为 512
int counter = 0;
char *fileName = (char *) malloc(sizeof(int));
//sprintf(fileName, "%03i.jpg", counter);
FILE *img = NULL;
while(feof(p) == 0)
{
fread(buffer, sizeof(char), 512, p);
if (buffer[0] == 0xff && buffer[1] == 0xd8 && buffer[2] == 0xff && ((buffer[3] & 0xf0) == 0xe0)) //checks if the first four bytes match
{
if(img == NULL)
{
sprintf(fileName, "%03i.jpg", counter);
img = fopen(fileName, "w");
fwrite(buffer, sizeof(char), 512, img);
}
else
{
counter++;
sprintf(fileName, "%03i.jpg", counter);
img = fopen(fileName, "w");
fwrite(buffer, sizeof(char), 512, img);
}
}
else
{
//continue writing to existing file
if(img == NULL)
{
continue;
}
else
{
fwrite(buffer, sizeof(char), 512, img);
}
}
if(feof(p) > 0)
{
fclose(p);
fclose(img);
free(fileName);
free(buffer);
return 0;
}