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/
分类: 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); 这个一个空格都没有,全部是*,长度不足才补齐,而且是缺多少补多少。
点击(此处)折叠或打开
点击(此处)折叠或打开