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 类型字符的用法当它们与 printfwprintf 函数一起使用时,是微软的扩展名而不是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 dd,其中 h.hhhh 是尾数的十六进制数字 (使用小写字母) , dd 是一个或多个指数位数。 精度指定在点后数字的个数。

A

浮点

有符号的十六进制双精度浮点值有如下形式[−]0Xh.hhhh 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 类型字符只用在使用格式规范的驱动程序调试函数,例如dbgPrintkdPrint.

如果对应浮点转换说明符的参数是无限大,不确定或 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

请参见

参考

printf、_printf_l、wprintf、_wprintf_l

格式规范语法:printf 和 wprintf 函数

标志指令

printf 宽度规范

精度规范

大小规范

_set_output_format