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 au format sprintf. J'essaie ce qui suit

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

Espérant avoir la chaîne suivante

"000000000000000000000000000324"

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

28
demandé sur jwueller 2011-05-25 01:16:18

6 réponses

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

56
répondu Seth Robertson 2011-05-24 21:18:59

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

sprintf( buf, "%030d", my_val );
7
répondu Nick Meyer 2011-05-24 21:19:00

Vous avez la syntaxe légèrement fausse; le code suivant produit la sortie souhaitée:

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

De L'Article de Wikipedia sur Printf :

[...] printf("%2d", 3) results in " 3", while printf("%02d", 3) results in "03".
6
répondu Sreerac 2011-05-24 21:30:36

Essayez:

sprintf( buf, "%030d", my_val );
5
répondu Matthew 2011-05-24 21:18:48

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 indicateurs. Donc, si vous voulez un précédent '+' pour les nombres positifs, utiliser '%+d'.

2
répondu jbruni 2011-05-24 21:21:39

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

1
répondu John 2011-05-24 21:19:30