我错误地编写了此代码:
#include <stdio.h>
int main() {
printf("%d"); // Missing argument!
return 0;
}
令人难以置信的是,它已经编译(存在警告),但是当我运行时,我会出乎意料的输出,有时甚至是崩溃
printf("%d")
printf("%d")
采用格式字符串来解释其他参数。由于printf
期望一个整数,但没有提供一个整数,因此仍然试图从堆栈(或寄存器)中获取一个参数,从而导致了未定义的行为
(ub)。
2。为什么要编译?C未在编译时检查传递给
printf
的参数数(除非启用警告)。
3。运行时会发生什么?由于期望一个整数,但会获取随机数据,输出是垃圾或可能导致分段故障。
如何解决:提供正确的论点:%d
启用编译器警告要捕获此类错误:
printf