我正在尝试用 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*)
该变量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)