printf 是 C 語言最常用的輸出函數,但許多開發者忽略了它的返回值。本文透過實例探討 printf 返回值的意義與巢狀呼叫行為。
根據 C 標準,printf 返回成功輸出的字元總數,若發生輸出錯誤則返回負值。
考慮以下程式碼片段:
int result = printf("%d", printf("%d", printf("%d", 42)));
printf("%d", 42):輸出 42,返回 2 (兩字元)printf("%d", 2):輸出 2,返回 1 (一字元)printf("%d", 1):輸出 1,返回 14221,result = 1snprintf(NULL, 0, fmt, ...) 取得所需緩衝區大小誤以為 printf 返回格式化後的字串指標或成功布林值。實際上它返回 int 字元計數,這在舊版 C (K&R C) 中甚至未定義返回值,現代標準已明確規範。
理解 printf 返回值有助於編寫健壯的 I/O 代碼,尤其在錯誤處理與格式化長度預估場景中不可或缺。