c - 为什么这个 C 代码有效?

标签 c arrays string char scanf

<分区>

为什么我可以在数组“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/

相关文章:

c - 数组值不更新

javascript - 从 meteor mongo 返回数组

c - 反转 C 字符串函数崩溃?

java - java中根据条件从字符串数组中提取单词

javascript - 如何使用 javascript jquery 将具有多个 id 的数组制作为视频标签

java - 使用 SharedPreferences 的 ClassCastException

c - 二维数组与一维数组的性能

java - JNI 是否依赖于平台?

c - 如何在 sscanf 中使用 set scanset 读取数字,如 0-9

arrays - 如何初始化向量数组?