C语言格式化输出问题

在日常使用中C语言时,对于命令行工具输出格式化控制非常重要,虽然每天都在用printf
但是对其具体的使用还是很容易忘记,于是做如下总结
在 C 语言中,格式化打印主要通过 printf
、sprintf
、snprintf
、fprintf
等函数实现,它们都使用格式字符串来指定输出数据的类型和格式。格式字符串由普通字符和格式指定符组成,格式指定符用来指定随后参数的打印方式。
常用的格式指定符:
%d
:输出有符号十进制整数。%u
:输出无符号十进制整数。%x
或%X
:输出十六进制整数,%x
输出小写字母,%X
输出大写字母。%o
:输出八进制整数。%f
:输出浮点数。%e
或%E
:输出指数形式的浮点数,%e
使用小写e
,%E
使用大写E
。%g
或%G
:输出浮点数,自动选择%f
或%e
/%E
的格式,取决于数值的大小。%c
:输出单个字符。%s
:输出字符串。%p
:输出指针的值(十六进制表示)。%%
:输出一个百分号%
。
除了上述基本的格式指定符,还可以在 %
和格式字符之间插入一些标志、宽度、精度等修饰符:
标志方式
标志
:-
:左对齐输出。+
:输出数值的正负号。#
:对于%o
、%x
、%X
,添加前缀0
、0x
、0X
;对于%f
、%e
、%E
,强制显示小数点;对于%g
、%G
,防止尾部零被删除。0
:用零填充空位。
宽度和精度
-
宽度
:指定输出字段的最小宽度。如果输出小于这个宽度,会在左边或右边填充空格或零(取决于是否使用了-
或0
标志)。 -
精度
:- 对于
%f
、%e
、%E
,精度表示小数点后的数字位数。 - 对于
%g
、%G
,精度表示有效数字的最大位数。 - 对于
%s
,精度表示输出字符串的最大长度。 - 对于整数类型,精度表示最小数字位数,不足部分会填充零。
- 对于
例子
1 |
|
注意事项
- 确保格式指定符与提供的参数类型相匹配,否则可能会导致未定义的行为。
- 使用
%s
输出字符串时,确保字符串以 null 结尾,否则可能会读取到不确定的数据。 - 使用
%
打印百分号时,需要写成%%
。 - 注意
printf
家族函数的安全性问题,如缓冲区溢出。建议使用snprintf
或fgets/fputs
来避免这类问题。