请考虑以下几点:

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来说是新的。)
更新
这是一个非常简单的程序。没有重新分配。当我进入调试器时,fileNo在执行sprintf行后立即重置为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
        }

最佳答案

你有以下几点:

char somecharvariable;
char outfile[7];
int fileNo = 0;
sprintf(outfile, "%03d.jpg", fileNo);

哎呀。字符串null终止符覆盖了fileno。文件长度应为8。如果您允许fileNo超过999,您的代码将崩溃。
在fileNo上放置静态标志并不能解决问题。它只是把问题转移到其他变量上。

关于c - 基本的clang:sprintf将int计数器重置为0,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44355040/

10-08 22:08