我在这段代码上使用了一个调试器,我的代码中有一个地方意外地改变了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);
}