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

C 語言 printf 格式輸出函數完整指南

     編輯:關於C語言

printf 格式輸出完全手冊

printf 是 C 語言標準庫中最常用的格式化輸出函數,原型:int printf(const char *format, ...);。掌握其格式控制字符串是輸出對齊、精度控制、調試打印的基礎。

格式字符串構成

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

  • %:啟動格式佔位符。
  • 標志:- (左對齊)、+ (顯示符號)、空格 (正數前加空格)、# (替代形式)。
  • 寬度:最小輸出字符數,不足填充空格 (或配合 - 右填充)。可用 * 由參數指定。
  • 精度:.數字 或 .*。對整數:最小位數 (前導 0);對浮點:小數位數;對字符串:最大字符數。
  • 長度:hh (char)、h (short)、l (long/double)、ll (long long)、L (long double)、z (size_t)、t (ptrdiff_t)。
  • 類型:見下表。

常用類型字符對照表

類型對應數據說明
d, i有符號整數十進制輸出。i 掃描時支持八/十六進制輸入,輸出同 d。
u無符號整數十進制輸出。
o無符號整數八進制輸出 (無前綴 0)。
x, X無符號整數十六進制輸出 (小寫/大寫字母),無前綴 0x。配合 # 輸出 0x/0X。
f, F浮點數十進制小數形式。F 輸出 INF/NAN 大寫。
e, E浮點數科學計數法 (如 1.23e+04)。
g, G浮點數自動選擇 f 或 e 中較短者,去除尾部 0。
c字符輸出單個字符 (int 參數轉 unsigned char)。
s字符串輸出以 \0 結尾的字符數組。配合精度限制長度。
p指針輸出指針地址 (通常十六進制帶 0x 前綴)。
%無輸出字面 %。

標志字符詳解

標志效果示例
-左對齊 (默認右對齊)%-10d → "123 "
+總是顯示符號 (+/-)%+d → "+123"
空格正數前加空格,負數顯示 -% d → " 123"
#替代形式%#x→"0x7b", %#o→"0173", %#f→強制顯示小數點
0寬度填充用 0 而非空格 (數值類型,被 - 覆蓋)%08d → "00000123"

長度修飾符關鍵點

  • %ld / %lld:long / long long。必須匹配,否則 UB。
  • %zu / %zd:size_t / ptrdiff_t (C99)。打印 sizeof 結果、數組索引首選。
  • %p:參數必須是 void*,其他指針類型需強轉 (void*)。
  • %hhu / %hhd:打印 unsigned char / signed char 作為整數。

實用示例

int a = 100;
double pi = 3.1415926;
char *str = "Hello";

printf("|%5d|%-5d|%05d|%+d|% d|\n", a, a, a, a, a);
// |  100|100  |00100|+100| 100|

printf("Pi: %.2f, %.4e, %g\n", pi, pi, pi);
// Pi: 3.14, 3.1416e+00, 3.14159

printf("Ptr: %p\n", (void*)str); // 正確打印指針

常見錯誤與 UB

  1. 格式與參數類型不匹配 (如 %d 打印 long long)。
  2. 缺少參數或參數過多。
  3. 用 %s 打印非以 \0 結尾的內存。
  4. %n 佔位符 (將已寫入字符數存入指針) 易導致安全漏洞,禁用或極度謹慎使用。

建議開啟編譯器警告 -Wformat -Wformat-security (GCC/Clang 默認包含在 -Wall 中) 自動檢測格式字符串錯誤。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved