int sprintf(char *buffer, const char *format, ...);
將格式化數據寫入字符數組 buffer,返回寫入字節數(不含結束符 \0)。
char buffer[200]; // 1. 字串拼接(指定最大寬度) char a1[] = "ABCDEFG", a2[] = "HIJKLMN"; sprintf(buffer, "%.*s%.*s\n", sizeof(a1), a1, sizeof(a2), a2); // %.*s:寬度由對應參數動態指定 // 2. 多類型數據格式化到同一 buffer char str[] = "computer"; char c = 'L'; int i = 35; float fp = 1.7320534f; int j = 0; j += sprintf(buffer + j, "String:%s", str); j += sprintf(buffer + j, "Character:%c", c); j += sprintf(buffer + j, "Integer:%d", i); j += sprintf(buffer + j, "Real:%f", fp); // 累加偏移量實現追加 // 3. 數值格式化(替代 itoa) short m = -1; int n = 100; sprintf(buffer, "%-4d%4d", 123, 4567); // "123 4567" 左對齊 sprintf(buffer, "%08x", 4567); // "000011d7" 16進制左補0 sprintf(buffer, "%#04X", (unsigned short)m); // "0xFFFF" 無符號短整型 sprintf(buffer, "%.2f", (double)n); // "100.00" 保留2位小數
| 格式 | 含義 | 範例輸出 |
|---|---|---|
%m.ns | 字串:寬度 m,最多取 n 字符 | %5.3s → " ab" |
%.*s | 寬度/精度由參數動態傳入 | sprintf(buf, "%.*s", 3, "hello") → "hel" |
%-md | 左對齊,寬度 m,右補空格 | %-5d → "123 " |
%0md | 右對齊,寬度 m,左補 0 | %05d → "00123" |
%#x/%#X | 16進制帶 0x/0X 前綴 | %#x → "0x1f" |
%.nf | 浮點數保留 n 位小數 | %.2f → "3.14" |
sprintf 不檢查長度,生產環境建議用 snprintf。%X 對應 unsigned int,傳 short 需強轉 (unsigned short),否則符號擴展導致錯誤輸出(如 -1 → FFFFFFFF)。\0 不計入。可用於追加寫入偏移計算。sprintf_s、snprintf 提供邊界檢查。sprintf 是 C 語言構建格式化字串的瑞士軍刀,掌握動態寬度/精度、對齊填充、進制前綴、浮點精度等技巧,能極大簡化字串處理代碼。務必養成緩衝區大小檢查習慣,避免安全隱患。