Chinaunix首页 | 论坛 | 博客
  • 博客访问: 6036097
  • 博文数量: 579
  • 博客积分: 1548
  • 博客等级: 上尉
  • 技术积分: 16632
  • 用 户 组: 普通用户
  • 注册时间: 2012-12-12 15:29
个人简介

http://www.csdn.net/ http://www.arm.com/zh/ https://www.kernel.org/ http://www.linuxpk.com/ http://www.51develop.net/ http://linux.chinaitlab.com/ http://www.embeddedlinux.org.cn http://bbs.pediy.com/

文章分类

全部博文(579)

文章存档

2018年(18)

2015年(91)

2014年(159)

2013年(231)

2012年(80)

分类: LINUX

2015-05-25 19:42:45

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

这些参数的详细用法请参考msdn: (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);
这个一个空格都没有,全部是*,长度不足才补齐,而且是缺多少补多少。


实例1《%*s

点击(此处)折叠或打开 

  1. #include <stdio.h>
  2. #include <stdlib.h>

  3. int main(int argc,char *argv[])
  4. {
  5.     printf("hello [%*s]\n",4,"******"+4);

  6.     return 0;
  7. }
  8. ~
测试结果:



实例2《%.*s》:

点击(此处)折叠或打开

  1. #include <stdio.h>
  2. #include <stdlib.h>

  3. int main(int argc,char *argv[])
  4. {
  5.     printf("hello [%.*s]\n",4,"******"+4);

  6.     return 0;
  7. }
  8. ~
测试结果:




阅读(1390) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~