热门问题
时间线
聊天
视角
格式化字串
来自维基百科,自由的百科全书
Remove ads
格式化字串(英語:format string)是一些程式語言的輸入/輸出庫中能將字串參數轉換為另一種形式輸出的函數。例如C、C++等程式語言的printf類函數,其中的轉換說明(conversion specification)用於把隨後對應的0個或多個函數參數轉換為相應的格式輸出;格式化字串中轉換說明以外的其它字元原樣輸出。[1]

C語言printf函數為代表的一類
格式化字串中的預留位置用於指明輸出的參數值如何格式化。
格式化預留位置(format placeholder),語法是:
%[parameter][flags][field width][.precision][length]type
Parameter可以忽略或者是:
Flags可為0個或多個:
Field Width給出顯示數值的最小寬度,典型用於制表輸出時填充固定寬度的表目。實際輸出字元的個數不足域寬,則根據左對齊或右對齊進行填充。實際輸出字元的個數超過域寬並不引起數值截斷,而是顯示全部。寬度值的前導0被解釋為0填充標誌,如上述;前導的負值被解釋為其絕對值,負號解釋為左對齊標誌。如果域寬值為*
,則由對應的函數參數的值為當前域寬。
Precision通常指明輸出的最大長度,依賴於特定的格式化類型。對於d、i、u、x、o的整型數值,是指最小數字位數,不足的位要在左側補0,如果超過也不截斷,預設值為1。對於a,A,e,E,f,F的浮點數值,是指小數點右邊顯示的數字位數,必要時四捨五入或補0;預設值為6。對於g,G的浮點數值,是指有效數字的最大位數;預設值為6。對於s的字串類型,是指輸出的位元組的上限,超出限制的其它字元將被截斷。如果域寬為*
,則由對應的函數參數的值為當前域寬。如果僅給出了小數點,則域寬為0。
Length指出浮點型參數或整型參數的長度。此項Microsoft稱為「Size」。可以忽略,或者是下述:
此外,在ISO C99廣泛接受前,還有幾個平台相關的length選項:
ISO C99的標頭檔inttypes.h
包含了許多巨集,用於平台獨立的printf
編碼。例如:
Remove ads
Type,也稱轉換說明(conversion specification/specifier),可以是:
寬度與精度格式化參數可以忽略,或者直接指定,或者用星號"*
"表示取對應函數參數的值。例如printf("%*d", 5, 10)
輸出" 10
";printf("%.*s", 3, "abcdef")
輸出"abc
"。
如果函數參數太少,不能匹配所有的格式參數說明符,或者函數參數的類型不匹配,將導致未定義(undefined)行為。過多的函數參數被忽略。許多時候,未定義的行為將導致格式化字串攻擊。
某些編譯器,如GCC,會靜態檢查printf這一類函數的格式化參數並編譯警告存在的問題(當使用編譯標誌-Wall
或-Wformat
)。GCC也會對用戶自訂的printf風格函數做靜態檢查,如果在函數定義時使用了非標準的 __attribute__((format(...)))
。
- AMPL
- awk (通過sprintf)
- Bourne shell (sh)以及變種Korn shell (ksh), Bourne again shell (bash), Z shell (zsh)
- C
- C++ (以及iostream與iomanip輸出操作)
- Objective-C
- Clojure
- Common Lisp
- D
- F#
- GNU MathProg
- GNU Octave
- G (LabVIEW)
- Go
- Haskell
- Java (版本1.5開始,在
PrintStream
類提供了printf
函數) - Lua (string.format)
- Maple
- Mathematica
- MATLAB
- Mythryl
- OCaml
- (OCaml Batteries Included provides an additional user-extensible printf)
- PARI/GP
- PHP
- Perl
- Python (使用%運算子。2.6版以後提供了format方法。)
- R
- Ruby
- Rust
- Tcl (通過format命令)
- Transact-SQL (通過xp_sprintf (頁面存檔備份,存於互聯網檔案館))
- Vala (通過
print()
與FileStream.printf()
)
此外,Windows API的FormatMessage函數也使用格式化字串說明。
Remove ads
參考文獻
外部連結
Wikiwand - on
Seamless Wikipedia browsing. On steroids.
Remove ads