%[標誌][最小寬度][.精度][長度]類型
方括號內為可選項。以下逐項詳解。
| 符號 | 輸出類型 | 說明 |
|---|---|---|
d, i | 有號十進制整數 | 正數不輸出 + 號 |
u | 無號十進制整數 | |
o | 八進制無號整數 | 不輸出前綴 0 |
x, X | 十六進制無號整數 | 小寫/大寫字母,不輸出 0x |
f | 十進制浮點數 | 固定小數點記數法 |
e, E | 指數記數法 | 小寫/大寫 e |
g, G | 自動選擇 f 或 e | 較短者優先,指數<-4 或 ≥精度用 e |
a, A | 十六進制浮點數 | C99,p 記數法 |
c | 單一字元 | |
s | 字串 | 輸出至 \0 |
p | 指標位址 | 實現定義格式,通常 0x... |
n | 不輸出,寫入已輸出字元數 | 對應 int* 參數 |
% | 字面 % 字元 | %% |
| 標誌 | 效果 |
|---|---|
- | 左對齊(預設右對齊),右側填空格 |
+ | 有號數值必輸出正負號 |
空格 | 正數前加空格,負數加 - 號 |
# | 替代形式:o加 0,x/X加 0x/0X,浮點數強制顯示小數點,g/G保留尾隨 0 |
0 | 數值欄位寬度不足時左側填 0(遇 - 或指定精度時忽略) |
十進制整數,指定輸出最少字元數。實際長度超過則按實際輸出。printf("%10d", 42) → 前面 8 空格再輸出 42。
. 形式。數字
d,i,o,u,x,X):最少數位數,不足前補 0f,F,e,E):小數點後位數g,G:最大有效數字數s:最大輸出字元數(截斷)| 修飾符 | 對應類型 |
|---|---|
hh | signed char, unsigned char |
h | short, unsigned short |
l (ll) | long (long long), double (for f), wchar_t* (for s) |
L | long double |
j | intmax_t, uintmax_t |
z | size_t |
t | ptrdiff_t |
printf("%*.*s\n", width, precision, str); // 寬度與精度由參數傳入
%n 獲取已輸出長度int len;
printf("Hello%n World", &len); // len = 5
%d 對應 long → UB。用 %ld。%s 無長度限制:易緩衝區溢位。用 %.100s 或 snprintf。float 變參傳遞自動提升為 double,%f/%e/%g 統一對應 double。