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函数每次迭代三次成功读取文件;但是,在第三次迭代中,fread会导致分段错误。为什么会这样?
答案 0 :(得分:1)
sprintf(title,“%。3d.jpg”,i);将字符串值XXX.jpg放入标题缓冲区,长度为7个字节。
然而,sprintf null终止字符串,因此需要和额外的buyte来存储空字节。