使用 sprintf 时出现循环错误

gue*_*123 1 c printf

我正在尝试用 c 代码做一件简单的事情:

const char *files[4];
char buffer[50];
int i;
for(i = 0; i < 5; i++){
sprintf(buffer,"test%i%s", i, ".txt");
files[i] = buffer;
}
Run Code Online (Sandbox Code Playgroud)

文件输出:

test4.txt
test4.txt
test4.txt
test4.txt
test4.txt
Run Code Online (Sandbox Code Playgroud)

我真正想要实现的目标:

test0.txt
test1.txt
test2.txt
test3.txt
test4.txt
Run Code Online (Sandbox Code Playgroud)

谁能告诉我出了什么问题吗?(文件必须是 const char*)

bar*_*nos 5

该变量buffer在程序的整个执行过程中具有相同的地址。

因此files[0]files[1]files[2]files[3]将全部指向相同的地址。

在循环的最后一次迭代中,您尝试设置files[4],这会产生未定义的行为。


对于您想要实现的目标,您可以执行以下操作:

int i;
char files[5][50];
for (i=0; i<5; i++)
    sprintf(files[i],"test%d.txt",i);
Run Code Online (Sandbox Code Playgroud)