在C语言中,我想要将字符串限制在前8个字符内。例如,我有:
char out = printf("%c", str);
如何使其仅返回前8个字符?
在C语言中,我想要将字符串限制在前8个字符内。例如,我有:
char out = printf("%c", str);
如何使其仅返回前8个字符?
您可以通过在格式说明符中设置精度来限制长度:
printf("%.8s", str);
这将从指向str
的以空字符结尾的字符串中打印出最多八个字符。如果str
的长度小于八个字符,则会打印整个字符串。
请注意,空字符结尾的字符串的格式说明符为%s
,而不是%c
(%c
用于打印单个char
),并且printf
返回一个int
(打印的总字符数),而不是char
。
printf("%.*s", max_len, str);
- R Samuel Klatchko不是这样的。
表格打印“%8s”会填充到8个空格,就像给出的示例一样。它不会截断。ISOC99。如果这只是Windows的事情,那么好吧,微软在很多事情上都忽略了世界。如果字符串的长度超过制表符,则会打印完整的字符串。请参见:
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;
}
%8s
将最小宽度设置为八个字符;%.8s
将最大宽度设置为八个字符(这些分别是格式说明符的_宽度_和_精度_修饰符)。这种行为与平台无关-它是C语言规范(以及C ++,因为它包括C标准库)的一部分。 - James McNellis