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

C 語言 sprintf 格式化輸出詳解:%3d %6d 寬度佔位符實戰解析

     編輯:C 語言問答

C 語言 sprintf 格式化輸出詳解:%3d %6d 寬度佔位符實戰解析

`sprintf` 將格式化數據寫入字符串緩衝區,`%Nd` 中的數字 `N` 指定最小寬度,不足左側填充空格,超出不截斷。

代碼分析

#include <stdio.h>
int main() {
    char str[20];
    int a = 20984, b = 48090;
    sprintf(str, "%3d%6d", a, b);
    printf("%s\n", str);
    return 0;
}

輸出結果解析

輸出:20984 48090
       │    │
       │    └─ b=48090 (5位數) → %6d 左填1空格 → " 48090"
       └─ a=20984 (5位數) → %3d 寬度不足 → 不填充 → "20984"

實際字符串內容:`"20984 48090"` (中間有 1 個空格)

格式化佔位符完整語法

%[標誌][寬度][.精度][長度]類型
組件說明示例
標誌`-` 左對齊、`+` 顯示符號、空格 正數前空格、`0` 零填充、`#` 替代形式`%-6d` 左對齊
寬度最小字符數,不足填充`%6d`
精度小數位數 / 最大字符數`%.2f`、`%.5s`
長度`hh` `h` `l` `ll` `j` `z` `t` `L``%lld` `long long`
類型`d/i` `u` `o` `x/X` `f/F` `e/E` `g/G` `a/A` `c` `s` `p` `n``%d` 有符號十進制

常見組合示例

sprintf(buf, "%05d", 42);       // "00042" 零填充
sprintf(buf, "%-10s", "hello"); // "hello     " 左對齊
sprintf(buf, "%+d", 42);        // "+42" 強制符號
sprintf(buf, "%#x", 255);       // "0xff" 替代形式
sprintf(buf, "%*.*d", 6, 3, 42); // 寬度精度由參數指定 → "   042"

安全版本:snprintf

int snprintf(char *buf, size_t size, const char *fmt, ...);
// 保證不超過 size-1 字符,自動添加 \0,返回需寫入字符數 (不含 \0)

永遠優先使用 `snprintf`,防止緩衝區溢出。

返回值利用

int len = snprintf(buf, sizeof(buf), "Item %d: %.2f", id, price);
if (len >= sizeof(buf)) {
    // 截斷發生,緩衝區太小
}
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved