在 printf 中使用不正确的格式说明符

printf 的第一个参数中使用不正确的格式说明符会调用未定义的行为。例如,下面的代码调用未定义的行为:

long z = 'B';
printf("%c\n", z);

这是另一个例子

printf("%f\n",0);

上面的代码行是未定义的行为。%f 预计会翻倍。但是 0 是 int 类型。

请注意,如果在编译期间打开正确的标志(-Wformat in clanggcc),编译器通常可以帮助你避免这类情况。从最后一个例子:

warning: format specifies type 'double' but the argument has type
      'int' [-Wformat]
    printf("%f\n",0);
            ~~    ^
            %d