我有一个代码片段,其中有一个
printf("%.*s\n")
是什么%.*s
意思?
您可以使用星号 ( *
) 将宽度说明符/精度传递给printf()
,而不是将其硬编码到格式字符串中,即
void f(const char *str, int str_len)
{
printf("%.*s\n", str_len, str);
}
更详细的在这里。
整数值或
*
指定最小字段宽度。如果需要,结果会用空格字符(默认情况下)填充,右对齐时在左侧,如果左对齐,则在右侧。在使用 * 的情况下,宽度由 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|
见:http ://www.cplusplus.com/reference/clibrary/cstdio/printf/
.*
精度未在格式字符串中指定,而是作为必须格式化的参数之前的附加整数值参数。
s
字符串