在C中,我想将字符串限制为前8个字符。例如,我有:
char out = printf("%c", str);
如何才能使它只返回前8个字符?
答案 0 :(得分:9)
您可以通过在格式说明符中设置精度来限制长度:
printf("%.8s", str);
这将从str
指向的以null结尾的字符串中打印最多八个字符。如果str
的长度小于八个字符,则它将打印整个字符串。
请注意,以null结尾的字符串的格式说明符为%s
,而不是%c
(%c
是打印单char
),而{{1} }}返回printf
(打印的字符总数),而不是int
。
答案 1 :(得分:0)
否
这是不正确的。表格打印“%8s”最多可以说8个空格,如给出的示例所示。它没有截断。 ISOC99。如果这只是一个Windows的东西,好吧,MS在许多事情上忽略了这个世界。如果字符串的长度比制表长,则打印完整的字符串。参见:
int main()
{
char tmp[]="123456789";
printf("1 %1s\n", tmp);
printf("2 %2s\n", tmp);
printf("4 %4s\n", tmp);
printf("8 %8s\n", tmp);
printf("16 %16s\n", tmp);
printf("32 %32s\n", tmp);
return 0;
}
在Solaris 5.9上从gcc 3.4.2输出:
> ./a.out
1 123456789
2 123456789
4 123456789
8 123456789
16 123456789
32 123456789
sprintf()将复制并截断一个字符串,然后将其发送到printf。或者,如果您不关心源字符串:
char * trunc(char *src, int len)
{
src[len]=0x0;
return src;
}
参考文献:国际标准©ISO / IEC ISO / IEC 9899:TC2,WG14 / N1124委员会草案 - 2005年5月6日