Is there a way to have a variable sized padding in printf
?
I have an integer which says how large the padding is:
void foo(int paddingSize) {
printf("%...MyText", paddingSize);
}
This should print out ### MyText
where the paddingSize should decide the number of '#' symbols.
Yes, if you use *
in your format string, it gets a number from the arguments:
printf ("%0*d\n", 3, 5);
will print "005".
Keep in mind you can only pad with spaces or zeros. If you want to pad with something else, you can use something like:
#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);
}
This outputs ###MyText
when sz
is 9, or MyText
when sz
is 2 (no padding but no truncation). You may want to add a check for pad
being too short.
Be careful though - some compilers at least (and this may be a general C thing) will not always do what you want:
char *s = "four";
printf("%*.s\n", 5, s); // Note the "."
This prints 5 spaces;
char *s = "four";
printf("%*s\n", 3, s); // Note no "."
This prints all four characters "four"
printf( "%.*s", paddingSize, string );
For example:
const char *string = "12345678901234567890";
printf( "5:%.*s\n", 5, string );
printf( "8:%.*s\n", 8, string );
printf( "25:%.*s\n", 25, string );
displays:
5:12345
8:12345678
25:12345678901234567890
You could write like this :
void foo(int paddingSize) {
printf ("%*s",paddingSize,"MyText");
}