易百教程

printf()函数

格式化输出到标准流的主要函数是printf()stdio.h头文件也可以使用printf_s()函数,它是printf()的安全版本。

printf_s()不允许%n输出规范包含在格式字符串中。%n输出将数据写入内存,这使其不安全。

要使用printf_s()函数,则必须在库头的#include指令之前将符号__STDC_WANT_LIB_EXT1__定义为1才能使可选的安全库函数可用。

printf_s()函数的原型是:

int printf_s(char *format, ...);

第一个参数是格式控制字符串。

函数的可选参数是要按顺序输出的值。它们必须在数字和类型上与格式字符串中出现的格式转换说明符相对应。下表显示了可选输出标志字符如何影响输出。

字符 用法
+ 确保在有符号输出值之前始终存在加号或减号。默认情况下,只有负值具有符号。
- 输出值左对齐,右边用空格填充。输出的默认定位是右对齐的。
0 指定应使用零填充整数或浮点值而不是空格以填充左侧的字段宽度。
# 确保:0是在八进制输出值之前,0x0X是在十六进制输出值之前,浮点输出值将包含一个小数点,对于gG浮点转换字符,尾随零将不是省略。
空格 指定正值或零值前面有空格而不是加号。

可选的field_width指定输出值的最小字段宽度。如果值需要更多字符,则只需展开字段。
例如,如果字段宽度前面带有0标志,则在09中,输出将在左侧用零填充。可选的精度说明符与浮点输出值一起使用,由一个句点后跟一个整数组成。
.n的说明符表示要为浮点值输出n个小数位。如果要输出的值超过n个有效数字,则它是四舍五入的。如果将其用于整数转换,则指定输出中显示的最小位数。
可选的大小标志如下表所示。

标志 效果
h 以下整数转换说明符适用于shortunsigned short参数。
hh 以下整数转换说明符适用于signed charunsigned char参数。
l(大写L字母) 以下整数转换说明符适用于longunsigned long参数。
ll(大写LL字母) 以下整数转换说明符适用于long longunsigned long long参数。
j 以下整数转换说明符适用于intmax_tuintmax_t参数。
z 以下整数转换说明符适用于size_t参数。 此标志避免了由于size_t是实现定义的整数类型而可能出现的潜在编译器警告。
t 以下整数转换说明符适用于ptrdiff_t参数。
L 以下浮点转换说明符适用于long double参数。

转换字符定义如何为特定类型的值转换输出,整数转换字符在下表中定义。

转换字符 产生输出
di 有符号十进制整数
o 无符号八进制整数
u 无符号十进制整数
x 无符号十六进制整数,带小写十六进制数字:abcdef
X 作为x但具有大写十六进制数字ABCDEF

浮点转换字符在下表中定义。

转换字符 产生输出
fF 有符号十进制值
e 带指数的带符号十进制值
E e一样,但用E表示指数而不是e
g e一样,或f取决于值的大小和精度
G g一样,但是E代表指数值
aA 以十六进制形式呈现double值,十六进制尾数值前面带有0x0X,任何指数前缀为pP,因此:0xh.hhhhp +/-d其中h是十六进制数字。

指针转换字符在下表中定义。

转换字符 产生输出
p 输出参数的值作为指针,值以实现定义的方式显示。 参数应为void *类型。

字符转换字符在下表中定义。

转换字符 产生输出
c 单个字符或精确字符
s 到达'\0'之前的所有字符或输出精确字符

%n说明符仅适用于printf()

相应的参数必须是int *类型,%n的效果是存储到目前为止写入标准输出的字符数。