在第一个参数中使用不正确的格式说明符来printf调用未定义的行为。例如,下面的代码调用未定义的行为:
long z = 'B'; printf("%c\n", z);
这是另一个例子
printf("%f\n",0);
上面的代码行是未定义的行为。%f期望加倍。但是0是类型int。
请注意,如果在编译过程中(-Wformatinclang和gcc)打开适当的标志,则编译器通常可以帮助您避免此类情况。从上一个示例:
warning: format specifies type 'double' but the argument has type 'int' [-Wformat] printf("%f\n",0); ~~ ^ %d