%* s格式说明符是什么意思?

时间:2009-06-16 10:00:41

标签: c printf format-specifiers

在我必须维护的一些代码中,我看到了格式说明符%*s。谁能告诉我这是什么以及为什么使用它?

其用法示例如下:

fprintf(outFile, "\n%*s", indent, "");

6 个答案:

答案 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可容纳适当数量的字符。

要左对齐该值,请使用负整数指定字段宽度。

参考文献:Java™ How To Program (Early Objects), Tenth Edition

答案 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;
}

用于忽略字符串。