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来避免这类问题。