web-dev-qa-db-fra.com

rembourrage avec sprintf

J'ai une question factice. Je voudrais imprimer un entier dans un tampon avec 0 mais je ne peux pas le trier le sprintfformat. J'essaye ce qui suit

char buf[31];
int my_val = 324;
sprintf( buf, "%d030", my_val );

en espérant avoir la chaîne suivante

"000000000000000000000000000324"

qu'est-ce que je fais mal? Cela ne signifie pas un pad avec 0 pour une largeur maximale de 30 caractères?

"%030d" est le droïde que vous recherchez

75
Seth Robertson

Vous avez obtenu une syntaxe légèrement erronée; Le code suivant produit la sortie souhaitée:

char buf[31];
int my_val = 324;
sprintf( buf, "%030d", (int)my_val );

De Article de Wikipedia sur Printf :

[...] printf("%2d", 3) results in " 3", while printf("%02d", 3) results in "03".
10
Sreerac

Le rembourrage et la largeur viennent avant le spécificateur de type:

sprintf( buf, "%030d", my_val );
7
Nick Meyer

Essayer:

sprintf( buf, "%030d", my_val );
5
Matthew

Vos paramètres de précision et de largeur doivent aller entre le "%" et le spécificateur de conversion "d", pas après. En fait, tous les drapeaux le font. Donc, si vous voulez un "+" précédent pour les nombres positifs, utilisez "% + d".

3
jbruni

C'est %030d, avec une lettre de type à la fin.

1
John