c - 使用 sprintf 时出现循环错误

标签 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;
}

文件输出:

test4.txt
test4.txt
test4.txt
test4.txt
test4.txt

我真正想要实现的目标:

test0.txt
test1.txt
test2.txt
test3.txt
test4.txt

谁能告诉我怎么了? (文件必须是 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);

关于c - 使用 sprintf 时出现循环错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26343809/

相关文章:

c - 尝试计算 C 中的字符、单词和行数

c - Linux 中的页表遍历

c - scanf 和 printf 未按顺序执行

c - printf 意外工作

c++ - 为什么在 msvc++ 中我们有 _snprintf 而其他编译器允许 snprintf

c - 为什么 C 程序在打印指针时会给出这样的输出?

在 C 中使用 sprintf 复制十六进制值

c - 数组声明导致 while 循环出现奇怪的行为

c - 如何将格式化数据添加到 printf() 调用之前

c - 这个链接器错误(SDL2)是什么?