跳至內容

格式化字串

出自Taiwan Tongues 客語維基
於 2025年8月23日 (六) 15:52 由 TaiwanTonguesApiRobot留言 | 貢獻 所做的修訂 (從 JSON 檔案批量匯入)

(差異) ←上個修訂 | 已批准修訂 (差異) | 最新修訂 (差異) | 下個修訂→ (差異)

格式化字串(英語:format string)係有兜程式設計語言个輸入 / 輸出庫當中做得同字串參數轉換做另外一種形式輸出个函式。比將講 C、C + + 等程式設計語言个 printf 類函式,其中个轉換說明(conversion specification)用來同隨後對應个零個抑幾下隻函式參數轉換做相應个格式輸出;格式化字串當中轉換說明以外个其他佢字元原旦係輸出。

C 語言 printf 函式係代表个一類

格式化預留位置

格式化字串裡肚个預留位仔用在指明輸出个參數值係仰般格式化。

格式化預留位置(format placeholder), 語法係:


` % [_ parameter _] [_ flags _] [_ field width _] [. _ precision _] [ _ length _] _ type _ `

Parameter做得無注意著或者係:


Flags做得為零隻抑係幾下隻:


Field Width拿出來顯示數值最細个寬度,典型用在制表輸出个時節填充固定寬度个表目。實際輸出字元个個數毋罅闊,根據左對齊抑係對齊來進行填充。實際輸出字元个個數超過域闊並無引起數值結束,總下就顯示。闊度值一个前導零分人解釋為零填充標誌,比將講;前導个負值分人解釋係絕對值,負號解釋係左對齊標誌。係講域寬值為 ` * `,係由對應个函式參數个值係當前域寬。

Precision一般指明輸出个 _ 盡大 _ 長度,倚恃特定个格式化類型。對於 d、i、u、x、o 个整型數值,係講最細數目字位數,不足个位仔愛在左片補零,係講超過乜無停,預設值係一。對於 a ,A , e , E , f , F 个浮點數值,係講小數點右片顯示个數字位數,必要个時節四捨五入或者係補零;預設值係六。對於 g , G 个浮點數值,係講有效數目字个最大位數;預設值係六。對於 s 个字串類型,係講輸出來个位元組个上限,超出限制个其他字元會斷忒。係講域寬為 ` * `,係由對應个函式參數个值係當前域寬。係講淨出了小數點,係零pa24。

Length指出浮點型參數抑係整型參數个長度。這項 Microsoft 安到「Size」。 做得無注意,或者係下背講:


另外,在 ISO C 九十九廣泛接受前,還有幾下隻平台相關个 length選項:


ISO C 九十九个標頭檔 ` inttypes . h ` 包含吔當多巨集,用在平台獨立个 ` printf ` 編碼。比將講:


類型

Type,乜講轉換說明(conversion specification / specifier), 做得係:


闊度摎精度格式化參數做得無注意,或者直接指定,或者用星號 " ` *` " 表示取對應函式參數个值。比將講 ` printf ( " % * d " , 五 , 十 ) ` 輸出 " ` 十 ` ";` printf ( " % . * s " , 三 , " abcdef " ) ` 輸出 " ` abc `"。

係講函式參數忒少,做毋得匹配所有个格式參數說明符合,或者函式參數个類型毋匹配,會造成無定義(undefined)行為。忒多个函式參數無共樣。當多時節,無定義个行為會造成格式化字串攻擊。

一兜編譯器,像係 GCC,會靜態檢查 printf 這一類函式个格式化參數並編譯警告存在个問題(當使用編譯標誌 ` -Wall ` 抑係 ` -Wformat `)。 GCC 也會著啦使用者自定个 printf 風格函式做靜態檢查,假使在函式定義个時節使用了非標準个 ` _ _ attribute _ _ ( ( format ( . . . ) ) ) `。

具有 printf 風格函式个程式語言

另外,Windows API 个 FormatMessage 函式也使用格式化字來串說明。

參考文獻

外部連結

  • C + + reference for ` std : : fprintf `
  • gcc printf format specifications quick reference
  • ` printf ` :  print formatted output –  系統介面(System Interfaces)參考,單一 UNIX® 規範第七期,由國際開放標準組織發布
  • The ` Formatter ` specification in Java 一千五百空二
  • GNU Bash ` printf ( 一 ) ` builtin