Réponse courte - oui, réponse longue : pas comme vous le souhaitez.
Vous pouvez utiliser la forme %* de printf qui accepte une largeur variable. Et, si vous utilisez '0' comme valeur à imprimer, combiné avec le texte aligné à droite qui a un remplissage zéro à gauche
printf("%0*d\n", 20, 0);
produit :
00000000000000000000
Avec ma langue fermement plantée dans ma joue, je vous offre ce petit bout de code de spectacle d'horreur.
Parfois, tu dois juste faire des choses mal pour te rappeler pourquoi tu fais tant d'efforts le reste du temps.
#include <stdio.h>
int width = 20;
char buf[4096];
void subst(char *s, char from, char to) {
while (*s == from)
*s++ = to;
}
int main() {
sprintf(buf, "%0*d", width, 0);
subst(buf, '0', '-');
printf("%s\n", buf);
return 0;
}