如何使用scanf进行char数组输入?

时间:2015-02-06 12:47:42

标签: c arrays scanf

我设置了一个大小为10的char数组,并希望检查允许的输入的实际大小。

我测试了

123456789; 1234567890; 123456789123456789

有趣的是,所有这些都通过并得到了正确的输出

123456789; 1234567890; 123456789123456789

它使我很困惑,因为我认为最后两个是错误的输入。

这有意义还是编译器差异?

这是代码

#include <stdio.h>
main()    
{    
char input[10];    
scanf("%s", input);    
printf(input);    
}  '  

2 个答案:

答案 0 :(得分:6)

格式说明符scanf()的{​​{1}}扫描输入,直到遇到空格。在您的情况下,您所看到的是未定义的行为。 你的数组可以容纳10 %s s,但你正在写出它的边界。

当你现在得到一个预期的答案时,这并不总是被证实,而是可能导致崩溃。

建议使用诸如char之类的函数来处理缓冲区溢出。

答案 1 :(得分:0)

您可以使用

scanf("%9s", input);