gpt4 book ai didi

c - "fread"导致段错误的函数

转载 作者:行者123 更新时间:2023-11-30 21:24:18 25 4
gpt4 key购买 nike

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次迭代中每次都成功读取文件;然而,在第三次迭代中,fread 导致段错误。为什么会发生这种情况?

最佳答案

sprintf(标题,"%.3d.jpg", i);会将一个字符串值 XXX.jpg 放入标题缓冲区,该字符串长度为 7 个字节。

但是 sprintf null 终止字符串,因此需要额外的 buyte 来存储空字节。

关于c - "fread"导致段错误的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38191567/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com