格式化字串
格式化字串(英語: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