<分区>
为什么我可以在数组“char array[3]”中存储超过 3 个字符? 例如,在这段代码中:
#include <stdio.h>
char array[3];
main()
{
scanf("%s", array);
putchar(array[5]);
return 0;
}
您可以输入任意长度的文本,它会打印第 6 个字母。您还可以使用“printf("%s", array) 打印整个文本。尽管数组只有 3 个字符的空间,但为什么这样做有效?
<分区>
为什么我可以在数组“char array[3]”中存储超过 3 个字符? 例如,在这段代码中:
#include <stdio.h>
char array[3];
main()
{
scanf("%s", array);
putchar(array[5]);
return 0;
}
您可以输入任意长度的文本,它会打印第 6 个字母。您还可以使用“printf("%s", array) 打印整个文本。尽管数组只有 3 个字符的空间,但为什么这样做有效?
最佳答案
您的代码能够打印整个单词,因为它还没有被覆盖。您正在设置内存,然后立即从中读取。如果您稍后在程序执行过程中尝试从该内存位置读取数据,您可能会得到完全不同的结果。
这是未定义的行为...在您的情况下,它打印了“正确”的输出。
关于c - 为什么这个 C 代码有效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14880496/