【发布时间】:2015-06-10 16:29:58
【问题描述】:
我最近编写了一个简单的程序,我错误地使用 scanf() 而不是 printf() 在控制台上显示消息。我原以为会出现编译时错误,但它编译得很好,在运行时没有警告和崩溃。我知道 scanf() 用于从键盘获取输入。我不应该在以下程序中收到错误吗?
#include <stdio.h>
int main()
{
scanf("Hello world"); // oops, It had to be printf()
return 0;
}
它是否调用未定义的行为(UB)? C标准中有没有提到这一点?为什么在编译时不检查是否将正确和有效的参数传递给 scanf() 函数?
【问题讨论】:
-
无法重现崩溃。该程序对我来说运行良好。
-
代码对我来说看起来是正确的,并且在编译和运行时应该可以正常完成。你怎么知道它“崩溃”?碰撞症状是什么?
-
我很确定语法暗示:没有编译失败和没有崩溃
标签: c scanf undefined-behavior