printf 类型字段字符
在格式规范中,type 字符是转换说明符指定对应的参数是否将被解释为字符、字符串、指针、整数或浮点数。 type 字符是唯一要求格式规范的字段;在任何可选字段后出现。
遵循以下格式字符串的参数按照相应的 type 字符和选项 范围 前缀被解释。 字符类型 char 和 wchar_t 的转换指定使用 c 或 C,对于单字节和多字节或宽字符串指定使用 s 或 S 取决于哪个格式化函数被使用。 字符和字符串参数被指定使用 c 和 s 通过 printf 系列函数被解释为 char 和 char*,或者由 wprintf 函数族解释为wchar_t 和 wchar_t* 。 字符和字符串参数被指定使用 C 和 S 通过 printf 系列函数被解释为 wchar_t 和 wchar_t*,或者由 wprintf 函数族解释为char 和 char* 。
整数类型例如 short, int,long, long long,和它们的 unsigned 变量,通过使用 d, i, o, u, x,和 X 被指定。 浮点类型例如 float, double,和 long double,通过使用 a, A, e, E, f, g,和 G 被指定。 默认情况下,除非它们被 size 字段长度前缀所修改,整数参数强制转换为 int 类型,浮点参数强制转换为 double。 在 64 位系统中,int 为 32 位值;因此,当为输出格式化时64 位整数会被截断,除非使用一个 size 的 ll 范围前缀或者使用 I64。 指针类型由 p 指定,使用平台默认的长度。
备注
C, S, 和 Z 类型字符, c 和s 类型字符的用法当它们与 printf 和 wprintf 函数一起使用时,是微软的扩展名而不是ANSI兼容。Visual C++ 不支持 F 类型的字符。
printf 类型字段字符
类型字符 |
参数 |
输出格式 |
---|---|---|
c |
字符 |
当使用 printf 函数,指定单字节字符;当使用 wprintf 函数,指定宽字符。 |
C |
字符 |
当使用 printf 函数,指定宽字符;当使用 wprintf 函数,指定单字节字符。 |
d |
Integer |
有符号的十进制整数 |
i |
Integer |
有符号的十进制整数 |
o |
Integer |
无符号的八进制整数 |
u |
Integer |
无符号的十进制整数。 |
x |
Integer |
无符号的十六进制整数;使用“abcdef”。 |
X |
Integer |
无符号的十六进制整数;使用“ABCDEF”。 |
e |
浮点 |
符号值具有以下形式 [ – ]d.dddd e [ 符号 ]dd[d] 在何处 d 是一个十进制数字,dddd 是一个或多个十进制数字, dd[d] 是两个或三个十进制数字取决于 输出格式 和指数大小, 和 符号 是 + 或 –. |
E |
浮点 |
与 e 格式一样除了 E 而不是 e 引入指数。 |
f |
浮点 |
符号值有以下形式 [ – ]dddd.dddd, 在何处 dddd 是一个或多个十进制数字。 小数点前的位数取决于数字的量级,而小数点后的位数取决于请求的精度。 |
g |
浮点 |
有符号的值以设置以 f 或者 e 格式显示,视哪种格式对于给定的值和精度更为简洁而定。 只有当值的指数小于-4或者大于或等于 precision 参数时使用 e 格式。 截断尾部零,并且小数点出现只有一个或多个数字紧随它。 |
G |
浮点 |
与 g 格式一样除了 E 而不是 e 引入指数。 |
a |
浮点 |
有符号的十六进制双精度浮点值有如下形式[−]0xh.hhhh p±dd,其中 h.hhhh 是尾数的十六进制数字 (使用小写字母) , dd 是一个或多个指数位数。 精度指定在点后数字的个数。 |
A |
浮点 |
有符号的十六进制双精度浮点值有如下形式[−]0Xh.hhhh P±dd,其中 h.hhhh 是位数的十六进制数 (使用大写字母) , dd 是一个或多个指数位数。 精度指定在点后数字的个数。 |
n |
指向整数的指针 |
到目前为止成功写入流或缓冲区的字符数。 此值储存在地址被当作参数的整数中。 参见安全批注在本文后面。 |
p |
指针类型 |
显示参数为十六进制数字的地址。 |
s |
String |
当使用 printf 函数,指定单字节或多字节字符串;当使用 wprintf 函数,指定宽字符串。 字符显示到第一个空字符或直到 precision 值为止。 |
S |
String |
当使用 printf 函数,指定宽字符串;当使用 wprintf 函数,指定单字节或多字节字符串。 字符显示到第一个空字符或直到 precision 值为止。 |
Z |
ANSI_STRING or UNICODE_STRING 结构 |
当一个 ANSI_STRING or UNICODE_STRING 结构的地址被当做参数传递,显示字符串包含在通过 Buffer 结构字段指向的缓冲区中。 使用 w 长度修饰符前缀指定一个 UNICODE_STRING 参数—例如,%wZ. 结构中的Length 字段必须设置字符串长度,以字节为单位。 结构中的MaximumLength 字段必须设置缓冲区长度,以字节为单位。 通常,Z 类型字符只用在使用格式规范的驱动程序调试函数,例如dbgPrint 和 kdPrint. |
如果对应浮点转换说明符的参数是无限大,不确定或 NAN,下表列出格式化输出。
值 |
Output |
---|---|
+无限大 |
1.#INF随机数字 |
-无限大 |
1.#INF随机数字 |
不确定的 (和安定的 NaN 相同) |
数字.#IND随机数字 |
NAN |
数字.#NAN随机数字 |
备注
如果 Buffer字段属于相对于%Z的参数,或者属于相对于 %s 或 %S的参数,是空指针,将会显示 "(null)"。
备注
在所有指数格式中,指数数字默认数显示的是3。通过使用 _set_output_format 函数,可以设置数字位数显示为2,但是如果因为指数大小需要可扩展为3
安全说明 |
---|
由于 %n 格式本质上是不安全的,则默认情况下禁用。如果在格式字符串中遇到 %n ,无效参数处理程序将被调用,如 参数验证所述。若要启用 %n 支持,请参见 _set_printf_count_output。 |