限制 C 语言中的输出

3

在C语言中,我想要将字符串限制在前8个字符内。例如,我有:

char out = printf("%c", str);

如何使其仅返回前8个字符?


%c 只会打印一个字符。我想你已经限制了你的输出。 - abelenky
2个回答

11

您可以通过在格式说明符中设置精度来限制长度:

printf("%.8s", str);

这将从指向str的以空字符结尾的字符串中打印出最多八个字符。如果str的长度小于八个字符,则会打印整个字符串。

请注意,空字符结尾的字符串的格式说明符为%s,而不是%c%c用于打印单个char),并且printf返回一个int(打印的总字符数),而不是char


谢谢,伙计。有没有什么办法可以去掉所有空格? - Tech163
没事了。我已经改成了printf("%.s", hexencode(c)); 谢谢你的帮助。 - Tech163
您还可以在运行时使用 * 指定最大长度:printf("%.*s", max_len, str); - R Samuel Klatchko

0

不是这样的。

表格打印“%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;
}

参考文献:国际标准©ISO / IEC ISO / IEC 9899:TC2,WG14 / N1124委员会草案-2005年5月6日。

假设你的意思是回应我的答案,我认为你在格式说明符中漏掉了“.”:%8s最小宽度设置为八个字符;%.8s最大宽度设置为八个字符(这些分别是格式说明符的_宽度_和_精度_修饰符)。这种行为与平台无关-它是C语言规范(以及C ++,因为它包括C标准库)的一部分。 - James McNellis

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接