Pour 'C', il existe une autre utilisation (plus complexe) de [s]printf qui ne nécessite pas de malloc() ou de préformatage, lorsque le remplissage personnalisé est souhaité.
L'astuce consiste à utiliser les spécificateurs de longueur '*' (min et max) pour %s, plus une chaîne de caractères remplie de votre caractère de remplissage jusqu'à la longueur maximale potentielle.
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
Le "%*.*s" peut être placé avant OU après votre "%s", selon le désir de remplissage GAUCHE ou DROIT.
[####Monkey] <-- Left padded, "%*.*s%s"
[Monkey####] <-- Right padded, "%s%*.*s"
J'ai découvert que la méthode PHP printf ( aquí ) prend en charge la possibilité de donner un caractère de remplissage personnalisé, en utilisant le guillemet simple (') suivi de votre caractère de remplissage personnalisé dans le format %s.
printf("[%'#10s]\n", $s); // use the custom padding character '#'
produit :
[####monkey]