在 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