为什么gets()需要更多的角色

cor*_*i11 -1 c c++

这是我的代码

char c[3];
gets(c);
puts(c);
Run Code Online (Sandbox Code Playgroud)

这里char变量c有3个索引.但如果我输入超过3个字母,那么我的代码打印超过3个字母,我打字.但是怎么可能c一次只能存储3个字符.不是吗?

Bar*_*rry 5

从以下笔记gets:

在给定足够长的输入字符串的情况下,该函数无法防止目标数组的缓冲区溢出.

因此,如果stdin碰巧有超过3个字符,那么您的代码就是未定义的行为.这是一个更喜欢打电话的好理由:

fgets(c, sizeof(c), stdin);
Run Code Online (Sandbox Code Playgroud)

绝对不会溢出.