为什么gcc允许两个以上的输入字符到长度为2的char数组?

时间:2017-09-07 13:55:05

标签: c arrays gcc

我正在解释基本的C数据类型以及它们如何对某人起作用,当我翻过char数组时,我创建了一个长度为5的char数组,我声称他不能输入你的名字,因为他的名字是长度为7但最终发生了, 我不知道这是怎么发生的 可以请某人向我解释这种行为是怎么发生的?

这是我用过的代码

#include<stdio.h>
#include<math.h>
int main(){
    char a[2] ; 
    scanf("%s",&a);
    printf("%s",a); 
}

1 个答案:

答案 0 :(得分:2)

你只是得到了未定义的行为。

在你的代码中,scanf()无法知道最大尺寸(它怎么可能,它只是一个功能)而且只会假设你知道你是什么?做的。

为防止这种情况,请传递以下信息:

const size_t got = scanf("%1s", a);
if(got == 1)
  printf("Read '%s'\n", a);

请注意,在依赖具有有效值的变量之前,scanf()的返回值是一件好事。它可能会失败。