printf函数的几点说明

printf函数可能大多数人都用过,但是我们一般都不会详细全面的研究它的诸多格式。今天有空做了一些测试,记录如下:

测试环境:VMware+Ubuntu10.04 (gcc v4.4.3)

1、函数代码如下:

int main(int argc, char **argv)
{
        int a = 1234;
        int b = 0x5678;

        printf("%% 20d of 1234 is: % 20d\n", a);
        printf("%%-20d of 1234 is: %-20d\n", a);
        printf("%%+20d of 1234 is: %+20d\n", a);
        printf("%%#20d of 1234 is: %#20d\n", a);
        printf("%%020d of 1234 is: %020d\n", a);

        printf("%%#20x of 0x5678 is: %#20x\n", b);


        return 0;
}
得到的输出如下:

% 20d of 1234 is:                                       1234
%-20d of 1234 is: 1234                
%+20d of 1234 is:                                   +1234
%#20d of 1234 is:                                      1234
%020d of 1234 is: 00000000000000001234
%#20x of 0x5678 is:                                    0x5678

结论:

1、printf的格式部分定义如下:%[flags][width][.perc][F|N|h|l]type。因此格式字符数以%开始的,然后是flags(0个或1个),width(0个或1个),prec(以小数点开始的一个数字或没有),F/N/h/l/ll其中之一,最后是type(d,x,f,s,p等)。

2、flags有5种:一是空格,表示用空格填充。二是0,表示用0填充。三是减号,表示使用左对齐(默认是右对齐的)。四是加号,表示在数字前显示正负号。五是#,表示如果后面的type是x时打印的十六进制数前加0x。

3、width表示打印长度,不足的部分用空格或0填充。但是要注意一些默认处理,譬如如果同时设置了左对齐和零填充,那么0填充将自动转为空格填充。(因为如果在整数的后面填充0那打印值就错了)。

4、prec部分只在浮点数时有效,表示浮点数小数点后精确到的最多位数。

5、F/N/h/l/ll等,整数转换说明符,即对后面打印的整数进行强制转换后输出。譬如F表示远指针、N表示近指针、h表示将int强制截断为short输出,l表示将整数强制按long型输出,ll表示将整数强制按照long long输出。









评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

朱有鹏老师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值