C printf中的可变大小填充

C printf中的可变大小填充,c,formatting,printf,C,Formatting,Printf,有没有办法在printf中使用可变大小的填充 我有一个整数,表示填充的大小: void foo(int paddingSize) { printf("%...MyText", paddingSize); } 这应该打印出####MyText,其中填充大小应该决定“#”符号的数量。是的,如果在格式字符串中使用*,它将从参数中获取一个数字: printf ("%0*d\n", 3, 5); 将打印“005” 请记住,只能用空格或零填充。如果您想用其他内容填充,可以使用以下内容: #inc

有没有办法在
printf
中使用可变大小的填充

我有一个整数,表示填充的大小:

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

这应该打印出
####MyText
,其中填充大小应该决定“#”符号的数量。

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

printf ("%0*d\n", 3, 5);
将打印“005”

请记住,只能用空格或零填充。如果您想用其他内容填充,可以使用以下内容:

#include <stdio.h>
#include <string.h>
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);
}
#包括
#包括
内部主(空){
char*s=“MyText”;
无符号整数sz=9;
本月35日日日,来自来自各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各####“;
printf(“%s%s\n”),(sz
sz
为9时,输出
###MyText
;当
sz
为2时,输出
MyText
(无填充,无截断)。您可能需要添加一个检查
pad
太短

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

不过要小心-至少有些编译器(这可能是一个通用的C代码)不会总是做您想要的事情:

char *s = "four";
printf("%*.s\n", 5, s); // Note the "."
这个打印5个空格

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

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

您可以这样写:

void foo(int paddingSize) {
       printf ("%*s",paddingSize,"MyText");
}
更好地使用std::cout

using namespace std;
cout << setw(9)                       //set output width
     << setfill('#')                  // set fill character
     << setiosflags(ios_base::right)  //put padding to the left
     << "MyText";

对不起,@Debanjan,我漏掉了一个
*
字符。新版本检查得更彻底了。为什么char*pad要这么长?我的意思是,它不受最终输出字符串长度的限制吗
###MyText