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