首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C語言 printf 格式化輸出完整手冊:格式字串、旗標、寬度、精度、長度修飾與進階技巧

     編輯:關於C語言

格式字串完整語法

%[旗標][寬度][.精度][長度]類型

旗標

旗標效果範例
-左對齊%-10s
+正負號皆顯示%+d → +42
空格正數前加空格,負數加 -% d → 42
#替代形式%#x→0x2a, %#o→052, %#f強制小數點
0前導零填寬(數值型)%05d → 00042

寬度與精度

  • m:最小欄寬,不足補空格(或 0)
  • .n:精度
    • 整數:最小位數,前導零補足
    • 浮點:小數點後位數
    • 字串:最大字元數(截斷)
  • *:由引數動態指定 printf("%*.*s", w, p, str)

長度修飾

修飾對應類型備註
hhsigned char, unsigned charC99
hshort, unsigned short
llong, unsigned long, double (f)%lf 等同 %f
lllong long, unsigned long longC99
jintmax_t, uintmax_tC99
zsize_t, ssize_tC99
tptrdiff_tC99
Llong double

類型轉換字元完整表

字元輸出範例
d, i有號十進位整數42, -7
u無號十進位整數42
o八進位52
x, X十六進位 (小寫/大寫)2a, 2A
f, F定點小數3.141593
e, E科學記號3.141593e+00
g, G自動選 f/e 較短者3.14159
a, A十六進位浮點 (C99)0x1.921fbp+1
c單一字元A
s字串hello
p指標位址0x7ffc1234
n已輸出字元數寫入指標安全風險,建議禁用
%字面 %%% → %

進階技巧與陷阱

動態寬度/精度

printf("%*.*f\n", width, prec, val);  // 寬度、精度由變數控制

輸出字元計數 %n(危險)

int cnt;
printf("Hello%n World", &cnt);  // cnt = 5

格式化字串攻擊向量,現代編譯器 -Wformat-security 會警告,建議禁用。

浮點精度陷阱

  • float 有效數字 ~7 位,double ~15 位
  • printf("%.10f", 1.0/3) 顯示 10 位但實際精度僅 6~7 位
  • 財務計算請用整數分或定點庫

常見錯誤對照

錯誤代碼問題修正
printf("%d", 3.14);型別不符,未定義行為printf("%f", 3.14);
printf("%s", 42);整數當字串指標printf("%d", 42);
printf(buf);格式化字串漏洞printf("%s", buf);
scanf("%s", buf);緩衝區溢位scanf("%99s", buf);
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved