在我必须维护的一些代码中,我看到了格式说明符%*s
。谁能告诉我这是什么以及为什么使用它?
其用法示例如下:
fprintf(outFile, "\n%*s", indent, "");
答案 0 :(得分:50)
It's used to specify, in a dynamic way, what the width of the field is:
- 宽度未在格式字符串中指定,但作为附加 前面的整数值参数 必须格式化的参数。
所以“indent”指定在参数列表中为其后面的字符串分配多少空间。
所以,
printf("%*s", 5, "");
与
相同printf("%5s", "");
这是一种在文件中放置一些空格的好方法,避免循环。
答案 1 :(得分:9)
不要在没有NULL终止(打包)的缓冲区上使用“%* s”,认为它只打印“length”字段。
答案 2 :(得分:1)
http://www.cplusplus.com/reference/clibrary/cstdio/printf/
宽度未在格式字符串中指定,而是作为必须格式化的参数之前的附加整数值参数。
例如:printf("%*s", 4, myValue);
与printf("%4s", myValue);
等同。
答案 3 :(得分:1)
格式说明符%4s输出字段宽度为4的字符串,即printf显示至少包含4个字符位置的值。
如果要输出的值为less
而不是4个字符位置宽,则默认情况下该字段中的值为right justified
。
如果值为greater
而不是4个字符位置宽,则字段宽度expands
可容纳适当数量的字符。
要左对齐该值,请使用负整数指定字段宽度。
答案 4 :(得分:0)
*使fprintf填充输出,直到它是n个字符宽,其中n是存储在函数参数中的整数值,紧接在修改类型表示的前面。
printf("%*d", 5, 10) //will result in "10" being printed with a width of 5.
答案 5 :(得分:0)
在 printf 和 fprintf 中使用时:
<GroupBox Header="Model browser">
<ListView ItemsSource="{Binding ElementName=root, Path=CombinedCarModels}">
<ListView.View>
<GridView>
<GridViewColumn Width="120"
DisplayMemberBinding="{Binding ModelVariantId}"
HeaderContainerStyle="{StaticResource HeaderStyle}">
<GridViewColumn.HeaderTemplate>
<DataTemplate>
<StackPanel>
<Label HorizontalAlignment="Stretch"
Content="VariantID"/>
<TextBox Text="{Binding ElementName=root,
Path=CarModelFilter.ModelVariantId,
UpdateSourceTrigger=PropertyChanged,
Mode=TwoWay,
Converter={StaticResource nullint}}"/>
</StackPanel>
</DataTemplate>
</GridViewColumn.HeaderTemplate>
</GridViewColumn>
</GridView>
</ListView.View>
</ListView>
</GroupBox>
它以最小宽度显示变量,其余右对齐空格。要左对齐该值,请使用负整数。
在 scanf 和 sscanf 中使用时:
printf("%*s", 4, myValue); is equivalant to printf("%4s", myValue);
输出:
/* sscanf example */
#include <stdio.h>
int main ()
{
char sentence []="Rudolph is 12 years old";
char str [20];
int i;
sscanf (sentence,"%s %*s %d",str,&i);
printf ("%s -> %d\n",str,i);
return 0;
}
用于忽略字符串。