跳至內容

「格式化字串」:修訂間差異

出自Taiwan Tongues 台語維基
TaiwanTonguesApiRobot留言 | 貢獻
從 JSON 檔案批量匯入
 
(無差異)

於 2025年8月19日 (二) 21:56 的最新修訂

格式化字串(英語: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 的字串類型,是指輸出的位元組的上限,有夠有限制的其他的字元將被截斷。曷若闊為 ` * `,則對應的函式參數的值為當前域闊。若是干焦予出小數點,是闊的所在。

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