printf的格式字符串 : %[标记] [ [ * ] [数据宽度] ] [.精确度]类型
+ |
- |
0 |
# |
最小宽度 |
精确度 |
类型 |
显示符号 |
左对齐 (默认右对齐) |
数据前填0 (右对齐时) |
8进制加0 16进制加0x |
10进制整数 或者*号 |
例如.2 |
|
- |
Y |
- |
- |
Y |
- |
c |
- |
Y |
- |
- |
Y |
- |
s |
Y |
Y |
Y |
- |
Y |
- |
d,i |
- |
Y |
Y |
- |
Y |
- |
u |
- |
Y |
Y |
Y |
Y |
- |
o |
- |
Y |
Y |
Y |
Y |
- |
x |
Y |
Y |
Y |
- |
Y |
Y |
f,e,g,a |
-表示该类型不需要这个选项
从上表看出只有数据宽度和对齐才是所有类型都支持的格式,指定宽度时默认右对齐
只有在指定最小宽度时,我们才能使用-,0标志,这个时候的对齐和填充才有意义,实际上只要指定最小宽度,且数据不足这个宽度就一定会发生填充,以空白字符或者填充在数据前部或者填充在数据后部(视对齐情况而定)而0则是特指用0填充在数据前方,这样做是为了让数据对齐显得好看,需要说明的是虽然很多类型支持左对齐和填充0,但是实际上这两个选项是冲突的,左对齐就不可能填充0,填充0就不可能左对齐,左对齐的意思是说以空白符在数据之后进行填充
一些例子
"%12d" 数据宽度最少占12个字符宽,如数据不足12个字符则数据右对齐
"%+-12d" 12d含义同上,不同之处在于打印符号,数据左对齐
"%#x" 数据3A打印成0X3a
"%.4f" 数据保留小数点后4位的精度
实际上printf的格式字符串和sprintf是相同的
char buffer[100];
sprintf(buffer,"%10d",12);
printf("the string is %d bytes\n",strlen(buffer));
输出the string is 10 bytes