Des*_*tor 5 c scanf undefined-behavior
我最近编写了一个简单的程序,我错误地使用scanf()而不是printf()来在控制台上显示消息.我希望得到编译时错误,但它编译好,没有警告和运行时崩溃.我知道scanf()用于从键盘输入.我不应该在以下程序中出错吗?
#include <stdio.h>
int main()
{
scanf("Hello world"); // oops, It had to be printf()
return 0;
}
Run Code Online (Sandbox Code Playgroud)
它是否调用未定义的行为(UB)?在C标准中有没有提到这个?为什么在编译时不检查是否将正确有效的参数传递给scanf()函数?
代码表现正常.的确,scanf已经宣布了
int scanf(const char *format, ...);
Run Code Online (Sandbox Code Playgroud)
幸运的是,你format不包含任何%没有通信的内容...,这会调用UB.
此外,format是一个字符串文字,它允许编译器通过它,确保您传递与格式说明符相关的正确类型的参数,作为启用更高警告级别的完整性检查的一部分.(-Wformat family)