我有一个代码片段,其中有一个
printf("%.*s\n")
%.*s
是什么意思?
答案 0 :(得分:96)
您可以使用星号(*
)将宽度说明符/精度传递给printf()
,而不是将其硬编码为格式字符串,即。
void f(const char *str, int str_len)
{
printf("%.*s\n", str_len, str);
}
答案 1 :(得分:12)
答案 2 :(得分:11)
更详细here。
指定最小字段宽度的整数值或
*
。如果需要,结果将填充空格字符(默认情况下),右对齐时填充左侧,如果左对齐则填充右侧。在使用*的情况下,宽度由int类型的附加参数指定。如果参数的值为负,则会产生指定的 - 标志和正字段宽度。 (注意:这是最小宽度:永远不会截断该值。)
.
后跟整数或*,或两者都不指定精度 转换。在使用*的情况下,精度为 由int类型的附加参数指定。如果是这个值 论证是否定的,它被忽略了。如果既不是数字也不是* 使用时,精度为零。请参阅下表以获取确切的信息 精度的影响。
因此,如果我们尝试两种转换规范
#include <stdio.h>
int main() {
int precision = 8;
int biggerPrecision = 16;
const char *greetings = "Hello world";
printf("|%.8s|\n", greetings);
printf("|%.*s|\n", precision , greetings);
printf("|%16s|\n", greetings);
printf("|%*s|\n", biggerPrecision , greetings);
return 0;
}
我们得到输出:
|Hello wo|
|Hello wo|
| Hello world|
| Hello world|
答案 3 :(得分:10)
请参阅:http://www.cplusplus.com/reference/clibrary/cstdio/printf/
.*
未在格式字符串中指定精度,但作为必须格式化的参数前面的附加整数值参数。
s
字符串