我设置了一个大小为10的char数组,并希望检查允许的输入的实际大小。
我测试了
123456789; 1234567890; 123456789123456789
有趣的是,所有这些都通过并得到了正确的输出
123456789; 1234567890; 123456789123456789
它使我很困惑,因为我认为最后两个是错误的输入。
这有意义还是编译器差异?
这是代码
#include <stdio.h>
main()
{
char input[10];
scanf("%s", input);
printf(input);
} '
答案 0 :(得分:6)
格式说明符scanf()
的{{1}}扫描输入,直到遇到空格。在您的情况下,您所看到的是未定义的行为。
你的数组可以容纳10 %s
s,但你正在写出它的边界。
当你现在得到一个预期的答案时,这并不总是被证实,而是可能导致崩溃。
建议使用诸如char
之类的函数来处理缓冲区溢出。
答案 1 :(得分:0)
您可以使用
scanf("%9s", input);