printf中可变大小的填充

有没有办法在printf有一个可变大小的填充?

我有一个整数表示填充有多大:

 void foo(int paddingSize) { printf("%...MyText", paddingSize); } 

这应打印出### MyText ,其中paddingSize应决定’#’符号的数量。

是的,如果在格式字符串中使用* ,它会从参数中获取一个数字:

 printf ("%0*d\n", 3, 5); 

将打印“005”。

请记住,您只能使用空格或零填充。 如果你想用其他东西填充,你可以使用类似的东西:

 #include  #include  int main (void) { char *s = "MyText"; unsigned int sz = 9; char *pad = "########################################"; printf ("%.*s%s\n", (sz < strlen(s)) ? 0 : sz - strlen(s), pad, s); } 

sz为9时输出###MyText ,或者当sz为2时输出###MyText (没有填充但没有截断)。 您可能需要添加一个检查pad太短。

但要小心 – 至少一些编译器(这可能是一般的C事物)并不总能做到你想要的:

 char *s = "four"; printf("%*.s\n", 5, s); // Note the "." 

这打印5个空格;

 char *s = "four"; printf("%*s\n", 3, s); // Note no "." 

这打印所有四个字符“四”

 printf( "%.*s", paddingSize, string ); 

例如:

 const char *string = "12345678901234567890"; printf( "5:%.*s\n", 5, string ); printf( "8:%.*s\n", 8, string ); printf( "25:%.*s\n", 25, string ); 

显示:

 5:12345 8:12345678 25:12345678901234567890 

你可以像这样写:

 void foo(int paddingSize) { printf ("%*s",paddingSize,"MyText"); }