【发布时间】:2019-11-18 09:23:58
【问题描述】:
我想编写一个 C 程序,它在运行时存储一堆句子,并在程序结束时将它们打印出来。 这是我写的:
#include<string.h>
#include<stdio.h>
int main(){
int counter = 0;
char state[100][200];
char stroo[3] = "yes";
sprintf(state[counter], "%s", stroo);
counter++;
char poo[2] = "44";
sprintf(state[counter], "%s", poo);
counter++;
for (int i=0; i<counter; i++) {
printf("%s\n", state[i]);
}
return 0;
}
对于输出,第一行打印“是”,这是我的预期。然而,第二行打印“44yes”。为什么打印“yes”和“44”?
【问题讨论】:
-
我们现在有一个缺少空终止符的常见问题解答。链接为重复。
-
出现意外输出的原因是,字符数组 stroo 和 poo 都不是以 null 结尾的。此外,在第二行中获得“44yes”的原因是堆栈内存正在向下增长并且字符数组已被分配连续的内存位置。