printf("%*s",4,"*****"+4);解释

printf("%*s",4,"*****"+4);解释
printf("%*s/n",6,"*****"+0); 解释 //收藏baidu一个问题,对自己有点用!

1.先从%*s解释起,printf的%后面的格式是:
%[flags] [width] [.precision] [{h | l | ll | I | I32 | I64}]type

这些参数的详细用法请参考msdn:
http://msdn2.microsoft.com/en-us/library/56e442dc(VS.80).aspx

这里我只说重点:其中参数[width]和参数[.precision]如果用*表示,代表这两个值是一个输入参数,因为本例中是%*s不是%.*s,因此可以肯定这个*代表了[width]([flags]不能用*表示).

[width]参数表示了一个宽度,如果输入的字符串很小,长度不到这个宽度,那么会用[flags]参数的值来填充,如果[flags]为空,就用空格来填充.

本例子中[width]=4,因此如果%s的字符串小于4,那么前面会用空格填充.

2."*****"+4,表示什么,在c中字符串"******"表示一个指针地址,"******"+4 表示的是这个指针+4,因此结果是一个"*",你可以试试"*****"+1,和"abcdf"+4,结果一个是"****",一个是"f".
如果还不理解,试试下面的程序:
char *ss="abcdf";
printf("%s,%s,%s,%s,%s",ss,ss+1,ss+2,ss+3,ss+4);

总结:这个printf表示的是:打印一个字符串,如果字符串不足4,用空格补齐,字符串的其实地址是"*****"+4,也就是第4个"*"的位置,打印结果" *"

=========================================
printf("%*s/n",6,"*****"+0);
输出长度不足6,用6个空格补齐,现在你的*已经有5个了,因此只用补一个空格。

printf("%*s/n",6,"********"+0);
这个一个空格都没有,全部是*,长度不足才补齐,而且是缺多少补多少

 

 

 

 

ch   =   "123456780123";  
    int   n   =   2,m   =   10;  
    //*.*   ,前边的*定义的是总的宽度,后边的定义的是输出的个数。  
    //如果后边的比前边的小,则使用空格在左侧补够m位。  
    printf("%*.*s/n",m,n,ch);//这里输出“                 12”  
    printf("%*.*s/n",n,m,ch);//这里输出“1234567890”  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值