我正在向某人解释基本的 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/