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

printf 格式化輸出完全指南:從基礎類型到寬度、精度、對齊的進階控制

     編輯:關於C語言

printf 格式化輸出完全指南:從基礎類型到寬度、精度、對齊的進階控制

printf 是 C 語言最常用的輸出函數,其格式字串擁有豐富的控制能力。本文系統梳理格式佔位符完整語法,涵蓋基礎類型、寬度、精度、對齊、填充、進制、長整數等實戰場景。

一、格式字串完整語法

%[標誌][寬度][.精度][長度]類型
  • 標誌:-左對齊、+顯示正負號、0零填充、空格正數前置空格、#替代形式
  • 寬度:最小輸出字元數,不足時按標誌填充
  • 精度:.數字,浮點數小數位數、字串最大字元數、整數最小位數
  • 長度:hh/h/l/ll/j/z/t/L 對應 char/short/int/long/long long/intmax_t/size_t/ptrdiff_t/long double

二、基礎類型輸出

int a = 10;
float f = 1.1f;
double d = 2.2;
char c = 'a';
char *s = "string";

printf("int: %d\n", a);        // 10
printf("float: %f\n", f);      // 1.100000
printf("double: %f\n", d);     // 2.200000
printf("char: %c\n", c);       // a
printf("string: %s\n", s);     // string
printf("octal: %o\n", a);      // 12 (八進制)
printf("hex: %x\n", a);        // a  (十六進制小寫)
printf("HEX: %X\n", a);        // A  (十六進制大寫)

三、寬度與對齊控制

int a = 1, b = 222;
printf("%10d %10d\n", a, b);   // 右對齊(預設)
printf("%-10d %-10d\n", a, b); // 左對齊
printf("%010d %010d\n", a, b); // 零填充右對齊

輸出:

         1       222
1         222
0000000001 0000000222

四、浮點數精度控制

double pi = 3.1415926535;
printf("%.2f\n", pi);  // 3.14
printf("%.5f\n", pi);  // 3.14159
printf("%10.3f\n", pi); // 寬度 10、精度 3 → "    3.142"

五、長整數與特殊類型

long long big = 123456789012345LL;
printf("%lld\n", big);        // 長長整數
printf("%zd\n", sizeof(int)); // size_t
printf("%td\n", ptrdiff);     // ptrdiff_t
printf("%p\n", (void*)&big);  // 指針地址

六、進制與替代形式

int x = 42;
printf("%#o\n", x);  // 052  (# 強制八進制前綴 0)
printf("%#x\n", x);  // 0x2a (# 強制十六進制前綴 0x)
printf("%#X\n", x);  // 0X2A

七、綜合範例:正負號、無小數浮點數

float f = 10.01f;
printf("%+f\n", f);    // +10.010000 (顯式正號)
printf("%+.0f\n", f);  // +10        (無小數位、顯式正號)

八、常見陷阱與最佳實踐

陷阱說明對策
格式與引數類型不匹配未定義行為,如 %d 對應 float啟用 -Wformat 警告,嚴格匹配
%s 無長度限制緩衝區溢出風險用 %.maxs 或 snprintf
長度修飾符遺漏long long 用 %d 截斷務必加 ll:%lld
字串非以 \0 結尾%s 讀越界確保字串合法或用精度限制

九、安全替代方案

  • snprintf(buf, size, fmt, ...):防溢位格式化到緩衝區
  • fprintf(stderr, ...):錯誤輸出導向標準錯誤流
  • asprintf (GNU 擴展):自動分配記憶體

熟練掌握 printf 格式控制,不僅能產出整齊可讀的日誌/報表,更能在除錯時精準觀測程式狀態。建議收藏語法速查表,實戰中隨查隨用。

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