Для 'C' існує альтернативне (більш складне) використання [s] printf, яке не вимагає жодного malloc () або попереднього форматування, коли потрібне спеціальне заповнення.
Фокус полягає у використанні специфікаторів довжини '*' (мін та макс) для% s, а також рядок, заповнений символом заповнення, до максимальної потенційної довжини.
int targetStrLen = 10;
const char *myString="Monkey";
const char *padding="#####################################################";
int padLen = targetStrLen - strlen(myString);
if(padLen < 0) padLen = 0;
printf("[%*.*s%s]", padLen, padLen, padding, myString);
printf("[%s%*.*s]", myString, padLen, padLen, 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]