【发布时间】:2026-02-04 15:05:01
【问题描述】:
我正在向某人解释基本的 C 数据类型以及它们如何工作,当我翻阅 char 数组时,我创建了一个长度为 5 的 char 数组作为 name,我向他声称你不能输入你的名字,因为他的名字是长度为 7,但最终它发生了, 我不知道这是怎么发生的 请有人向我解释一下这种行为是怎么发生的?
这是我使用的代码
#include<stdio.h>
#include<math.h>
int main(){
char a[2] ;
scanf("%s",&a);
printf("%s",a);
}
【问题讨论】:
-
它正在输入长度为 24 个字符的字符串
-
UB͏͏͏͏͏͏͏͏͏͏͏͏͏
-
它叫做"undefined behavior"。解决方法是不要编写导致未定义行为的代码。
-
scanf("%s")只是臭名昭著的不安全gets的另一个名称。 -
这就是为什么
scanf在生产代码中通常不受欢迎的原因。fgets()比较常用。