使用printf 或fprintf 進行十進位整數格式化時(%d、%u、% ld、%lld) ,確保指定的格式與正在格式化的資料類型相符至關重要。否則,可能會發生未定義的行為。
在程式設計中定義未定義的行為具有挑戰性,因為它包含大量可能的後果,包括:
考慮以下程式碼片段:
#include <stdio.h> int main() { long a = 10; long b = 20; printf("%d, %d\n", a, b); }
在 32 位元架構上,結果如預期:「10, 20」。然而,在 64 位元架構上,輸出更改為“10, 2097152”。
此異常是因為 printf 將 '%d' 格式說明符解釋為 int 類型佔位符,該佔位符是 32 位元的32 位元架構。但在 64 位元架構上,int 是 64 位,導致 long 值轉換不正確。
使用不正確的格式字串可能會產生嚴重後果:
以上是為什麼 printf/fprintf 中錯誤的格式字串會導致未定義的行為?的詳細內容。更多資訊請關注PHP中文網其他相關文章!