从C中的字符串打印特定字符

时间:2015-01-21 14:25:06

标签: c string printf

我正在处理字符串的前缀,例如:com应该给我c co com。 我知道打印一个字符是printf("%.5s",string)来打印前五个值。我想在循环而不是5中执行此操作,如何将其替换为i,这是一个递增值,类似于此printf("%.is",string)。我怎么能得到这个?

3 个答案:

答案 0 :(得分:5)

printf格式说明符中,所有字段宽度(在点之前)和精度(在点之后)都可以作为星号*给出。对于每个星号,在打印对象之前必须有一个额外的int参数。

所以,对于你的问题:

printf("%.*s", i, string);

请注意,附加参数必须是int,因此如果您有其他整数类型,则应该将其强制转换:

size_t len = strlen(len);
if (len > 2) printf("%.*s", (int) (len - 2), string);

答案 1 :(得分:1)

这是实现目标的最简单方法。

printf("%.*s\n", i, string);

如果你想生成格式字符串,你也可以这样做

char format[100]; /* the size should be estimated by you */

snprintf(format, sizeof(format), "%%.%ds", i);
printf(format, string)

检查snprintf()返回值以确保字符串没有被截断,如果为格式字符串选择合理的大小,则不太可能,但是你应该检查。

上面,格式说明符表示

  • 文字"%"
  • 然后是"."
  • 然后是整数"%d"
  • 然后是"s"

因此生成的字符串将是您需要传递给printf()的格式字符串。

答案 2 :(得分:0)

试试这个:

char s[] = "com";  
for(size_t i = 1; i <= strlen(s); i++)
{
    for(int j = 0; j < i; j++)  
         printf("%c", s[j]);
    printf(" ");  
}