热门问题
时间线
聊天
视角
格式化字符串
来自维基百科,自由的百科全书
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