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

介绍格式化字符串参数printfwprintf 的语法和有关的函数。 这些函数的更多安全版本可用,有关详细信息,请参阅 CRT 中的安全功能。 有关各个函数的信息,请参阅某些特定函数的文档。 有关这些提供函数的列表,请参阅流 I/O

包括选项和必填字段,格式规范,具有以下形式:

%[标签] [宽度] [精密度] [{h | l | ll | w | I | I32 | I64}] 类型

格式规范的每个字段是字符或表示特定布局选项或转换说明符的数量。 所需的type 字符指定要应用到参数的转化类型。 可选的flags、width和 precision 字段控制附加的格式方面。 一个基本的格式规范仅包含百分号和type 字符—例如,%s指定字符串转换。 如果百分号后跟有一个不具有含义的格式字段的字符,则该字符将复制到输出而不会改变。 打印百分号字符,请使用%%。

格式规范的字段控制参数转换和格式化的以下方面:

  • type
    需要转换说明符字符指定相关argument 是否被解释为字符、字符串、整数或是浮点数。 有关详细信息,请参阅printf 类型字段字符

  • flags
    可选字符或是字符控制输出原因、输出符号、空白、前导零调整、小数点、八进制和十六进制的前缀。 有关详细信息,请参阅标志指令。 多个标志可以出现在格式规范,并且标记可能会以任何排序出现。

  • width
    可选的十进制数字指定输出字符的最小字符数。 有关详细信息,请参阅printf 宽度规范

  • precision
    在浮点值中的小数点字符或对于整数值打印的最小数值后,可选的十进制数字指定字符的最大字符数,这些字符数为打印字符串、有效位的数目或数字个数。 有关详细信息,请参阅精度规范中的“精确值如何影响类型”。

  • h | l | ll | w | I | I32 | I64
    可选的 type 前缀指定对应参数的范围。 有关“范围前缀”的详细信息,请参阅 大小规范

安全说明安全说明

确保格式规范字符串不是用户自定义的。例如,考虑一个程序提示用户输入名称和存储命名为name字符串变量的输入。要打印 name,请不要执行下列操作:

printf( name ); /* Danger! If name contains "%s", program will crash */

相反地,请执行下列操作:

printf( "%s", name );

请参见

参考

printf、_printf_l、wprintf、_wprintf_l

printf_s、_printf_s_l、wprintf_s、_wprintf_s_l

printf_p 位置参数

标志指令

printf 宽度规范

精度规范

大小规范

printf 类型字段字符