gpt4 book ai didi

c - int 意外变回初始状态

转载 作者:行者123 更新时间:2023-11-30 15:23:28 25 4
gpt4 key购买 nike

我在这段代码上使用了调试器,并且我的代码中有一个地方 int 意外更改。我在顶部附近声明 int jpg = 0 。下面大约 10 行,我将 jpg 加 1。调试器此时显示 jpg = 1。如果 jpg < 10,它就会进入下一行。然后会发生一些奇怪的事情。执行 sprintf 函数后,jpg 现在等于 0。为什么???!!它搞砸了我其余的代码。我不明白为什么它在这里将 jpg 改回 0。

谢谢你的帮助,托德

<小时/>
FILE *outptr;

int main(void)
{
// open input file
FILE* image = fopen("card.raw", "r");
if (image == NULL)
{
printf("Could not open, does %s exist?\n", "card.raw");
return 1;
}

// declare a pointer to buffer
BYTE buffer[512];

// count the number of JPG files and create JPG filename
int jpg = 0;
char filename[7];

// read 512 bytes of the card
while (fread(&buffer, 1, 512, image) == 512)
{
// check first 4 bytes for JPG header info
if (buffer[0] == 0xff && buffer[1] == 0xd8 && buffer[2] == 0xff && (buffer[3] == 0xe0 || buffer[3] == 0xe1))
{
// increment jpg number and jpg filename
jpg = jpg + 1;

if (jpg < 10)
{
sprintf(filename, "00%d.jpg", jpg);
}
else
{
sprintf(filename, "0%d.jpg", jpg);
}

// check if this is first JPG, close previous jpg file if not

if (jpg != 1)
{
fclose(outptr);
}

// open output file
FILE* outptr = fopen(filename, "w");
if (outptr == NULL)
{
fclose(image);
fprintf(stderr, "Could not create %s.\n", filename);
return 2;
}

// write the 512B of buffer info to JPG file
fwrite(&buffer, 1, 512, outptr);
}

// not the start of a new jpg file, have we reached a jpg yet?
else if (jpg != 0)
{
// write the 512B of buffer info to JPG file
fwrite(&buffer, 1, 512, outptr);
}
}

// close the files
fclose(image);
fclose(outptr);
}

最佳答案

您有缓冲区溢出filename 数组缺少字符串终止符的空间,因此您将 个字符写入七字符数组。这导致 undefined behavior .

关于c - int 意外变回初始状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28785423/

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