为什么我可以在数组“char array [3]”中存储3个以上的字符? 例如,在此代码中:
#include <stdio.h>
char array[3];
main()
{
scanf("%s", array);
putchar(array[5]);
return 0;
}
您可以输入任意长度的文本,它将打印第6个字母。您还可以使用“printf(”%s“,array)打印整个文本。虽然数组只有3个字符的空格,但为什么会这样?
答案 0 :(得分:3)
您的代码可以打印整个单词,因为它尚未被覆盖。您正在设置内存,然后立即从中读取。如果您在程序执行后期尝试从该内存位置读取,则可能会得到完全不同的结果。
这是未定义的行为......在您的情况下,它会打印“正确”的输出。
答案 1 :(得分:1)
array
被定义为全局数组,因此通常是.bss
部分的一部分。由于系统的.bss部分有足够的内存,因此您可以写入相同的内容。显然,这是一种违规行为,当你超出这一部分的规模时会被捕获。
答案 2 :(得分:0)
由于scanf()的工作方式,它只会将发送给它的内容写入内存。因为您在写入后立即读取,所以阵列使用的额外内存还没有被覆盖,因此您可以读回整个字符串。
C中还有其他功能会限制您的输入,例如fgets()。