为什么溢出的char缓冲区不会导致错误?

时间:2019-03-09 18:37:05

标签: c

很长一段时间以来,我一直在想C语言中的字符串原理。我不知道为什么有些老师会使用我们只能在其中包含6个字母的示例数组{{ 1}},name[4],但是还有其他老师使用"john"来为size + 1留出空间,但是当我在code :: blocks中尝试时,却没有得到无论哪种情况都存在任何问题。我不知道为什么,即使我输入的名称超出范围示例\0name[4]也没有问题,我不明白为什么程序不会崩溃。 >

"Cristiano Ronaldo"

1 个答案:

答案 0 :(得分:3)

如果您输入足够长的单词而没有任何空格,该程序最终将在大多数现代系统上崩溃。

您可以通过以下方式修复它:

#include <stdio.h>

int main() {
    char name[7];
    printf("Type your name\n");
    if (scanf("%6s", name) == 1)
        printf("your name is: %s\n", name);
    return 0;
}