请考虑以下事项:
int fileNo = 0;
sprintf(outfile, "%03d.jpg", fileNo);
然后再
fileNo++; // fileNo equals 1 now
然后,如果你再次打电话:
sprintf(outfile, "%03d.jpg", fileNo);
fileNo
现在再次等于0。
此处的目标是在fileNo
中保留一个计数器,然后将该值传递给sprintf
以设置文件名。有没有更简单的方法将计数器转换为字符串值?或者我错过了一个可能阻止fileNo
重置为零的步骤?
我一直在研究malloc
,但是在必要的时候还不是很清楚。帮助
(我不是编程新手,但对C来说是新手。)
这是一个非常简单的程序。没有重新分配。当我进入调试器时,在sprintf
行执行后,fileNo立即重置为0。
...
static int fileNo = 0;
char outfile[7];
sprintf(outfile, "%03d.jpg", fileNo);
...
while(fread(buffer, 1, 512, inptr) == 512)
{
// 0xff 0xd8 0xff
if (buffer[0] == 0xff && buffer[1] == 0xd8 && buffer[2] == 0xff)
{
if (!found1stJPG)
{
found1stJPG = true;
} else {
fileNo++;
fclose(outptr);
sprintf(outfile, "%03d.jpg", fileNo); // fileNo is 1 before this executes
printf("outfile: %s,\n", outfile); // in the debugger fileNo is now 0
}
答案 0 :(得分:2)
您有以下内容:
char somecharvariable;
char outfile[7];
int fileNo = 0;
sprintf(outfile, "%03d.jpg", fileNo);
糟糕。字符串null终止符写在fileno上。 outfile应该是长度8.如果你允许fileNo超过999,你的代码无论如何都会崩溃。
将静态标志放在fileNo上并不能解决问题。它只是将问题重新定位到其他变量。