请考虑以下几点:
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/