Для 'C' существует альтернативное (более сложное) использование [s] printf, которое не требует каких-либо malloc () или предварительного форматирования, когда требуется пользовательское заполнение.
Хитрость в том, чтобы использовать% * спецификаторы длины (min и max) для% s, а также строку, заполненную вашим символом заполнения до максимальной потенциальной длины.
int targetStrLen = 10; // Target output length
const char *myString="Monkey"; // String for output
const char *padding="#####################################################";
int padLen = targetStrLen - strlen(myString); // Calc Padding length
if(padLen < 0) padLen = 0; // Avoid negative length
printf("[%*.*s%s]", padLen, padLen, padding, myString); // LEFT Padding
printf("[%s%*.*s]", myString, padLen, padLen, padding); // RIGHT Padding
"% *. * S" может быть помещен перед ИЛИ после вашего "% s", в зависимости от желаемого заполнения влево или вправо.
[####Monkey] <-- Left padded, "%*.*s%s"
[Monkey####] <-- Right padded, "%s%*.*s"
Я обнаружил, что PHP printf ( здесь ) действительно поддерживает возможность давать пользовательский символ заполнения, , используя одинарную кавычку ('), за которой следует ваш пользовательский символ заполнения , в пределах формат% s.
printf("[%'#10s]\n", $s); // use the custom padding character '#'
производит:
[####monkey]