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