Sha*_*ang 98 c printf format-specifiers
我有一个代码片段,其中有一个
printf("%.*s\n")
Run Code Online (Sandbox Code Playgroud)
什么%.*s
意思?
Aus*_*oke 105
您可以使用星号(*
)将宽度说明符/精度传递给printf()
,而不是将其硬编码为格式字符串,即
void f(const char *str, int str_len)
{
printf("%.*s\n", str_len, str);
}
Run Code Online (Sandbox Code Playgroud)
Ond*_*rej 17
这里更详细.
整数值或
*
指定最小字段宽度.如果需要,结果将填充空格字符(默认情况下),右对齐时填充左侧,如果左对齐则填充右侧.在使用*的情况下,宽度由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;
}
Run Code Online (Sandbox Code Playgroud)
我们得到输出:
|Hello wo|
|Hello wo|
| Hello world|
| Hello world|
Run Code Online (Sandbox Code Playgroud)
Jos*_*osh 10
请参阅:http://www.cplusplus.com/reference/clibrary/cstdio/printf/
.*
精度未在格式字符串中指定,而是作为必须格式化的参数之前的附加整数值参数.
s
字符串
归档时间: |
|
查看次数: |
71494 次 |
最近记录: |