redirect_to :future #思维驱动 » Blog Archive » 限定printf打印字符串时输出的字符个数

限定printf打印字符串时输出的字符个数

C语言里字符串copy有strncpy,比较有strncmp而输出呢?如果我想把一个字符串的前10个字符输出要用什么办法呢?建立一个新变量strncpy过去?不还有更简单的方法,经过认真阅读printf的man手册现在我已经知道的方法如果要输出一个字符串的前10个字符(再次验证man手册是一个多么好的学习工具哪。)
输出字符串的前10个字符:

原来我的做法是:
char sVal[32],sOutput[11];
strcpy(sVal,”1234567890aaaaaaa”);
strncpy(sOutput,sVal,10);
sOutput[10]=’\0′;
printf(”%s”,sOutput);

其实可以通过设置printf中的格式串进行并添加一个输出参数进行设置,
printf(”%.*”,10,sVal);
这样的做法与上述实现一样的功能。都是输出”1234567890″.
这种方法适用与需要打印某个串的前一部分或是没有以’\0′结束的字符数组.

[*]表示可能通过一个int类型的参数限定输出的长度:
prinf(”%10s”,sValue);

printf(”%*s”,10,sValue);
表示一样的意义。也就是说占10位不够10位补空格
但如果串符串长度大于指定长度那么会把整个字符串全部输出,如上例中的sVal输出结果为:
“1234567890aaaaaaa”

那么如何解决输出限定个数的字符呢?在格式串中加”.”来控制强制输出字符串个数。
[.]对于字符串表示强制最大输指定长度的字符.对于其它类型见下
(具体内容请查阅man 3 printf):
+ An optional precision. The precision is a . (dot) followed by a
decimal digit string. If no precision is given, the decimal digit
string is treated as 0 (zero). The precision specifies:

— The minimum number of digits to appear for the d, u, o, x, and X
conversions.

— The number of digits to appear after the radix character for the
e, E, and f conversions.

— The maximum number of significant digits for the g and G conver-
sions.

— The maximum number of bytes to be printed from a string in the s
and S conversions.

所以:
%10s与%.10s表示不一样的东西
%10s表示不足10位补10位,
%.10s表示多于10位截10位少于10位输出实际位数。

现在我们是不是找到了一种很简单、高效的输出限定字符个数的方法:
char sVal[32],sOutput[11];
strcpy(sVal,”1234567890aaaaaaa”);
printf(”%.*s”,10,sVal);

看完啦?再看看我们最近的10条记录对您是否有用呢?

要不,再找找其它内容:




或者给我们留下些意见、建议,这将给我们莫大的鼓励,促使我们做得更好。