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

标签 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); 
}

最佳答案

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

在您的代码中,scanf() 无法知道最大大小(怎么可能,它只是一个函数),它只会假设您知道自己在做什么。

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

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

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

关于c - 为什么 gcc 允许向长度为 2 的 char 数组输入两个以上的字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46098250/

相关文章:

c - 为什么用-fpic和-pie编译的程序会有重定位表?

c++ - 在 64 位 open suse linux 上构建 32 exe 出现链接错误

c - c 中令人恼火的 select() 行为

c - 这是使用 strcpy 的好方法吗?

python - 在内存中存储一​​个大的稀疏矩阵来计算特征值

c++ - const 字符串仍然更可取吗?

arrays - numpy.polyfit 显示 TypeError : unsupported operand type(s) for +: 'numpy.ndarray' and 'float'

c - 此函数声明的预期符号问题

c - MPI_Scatterv 不起作用

c - C 函数中的汇编代码