2010-05-06 10 views
9

Qu'est-%.6d signifie en:Que signifie "% .6d" signifie dans printf

printf("%s.%.6d len:%d ", timestr, header->ts.tv_usec, header->len); 

Est-ce une faute de frappe? Il semble %.6d est le même que %6d.

+7

était-il vraiment plus facile/plus rapide de poser cette question sur le SO que d'écrire un programme de test rapide (comme ceux dans les réponses) et l'exécuter pour voir la différence? – tomlogic

+0

Vous n'avez même pas besoin d'un programme. Exécutez 'printf '% .6d \ n' 1234' dans bash. –

Répondre

24
%.6d 

Dans le format .precision pour spécificateurs d'entiers (d, i, o, u, x, X), la précision spécifie le nombre minimal de chiffres à écrire. Si la valeur à écrire est plus courte que ce nombre, le résultat est avec les zéros à gauche. La valeur n'est pas tronquée même si le résultat est plus long.

%6d 

La largeur (ici 6) spécifie le nombre minimal de caractères à imprimer. Si la valeur à imprimer est plus courte que ce nombre, le résultat est rembourré avec des espaces. La valeur n'est pas tronquée même si le résultat est plus grand.

Exemple:

printf("%.6d\n%6d",1,1); 

sorties:

000001 
    1 
+0

Donc, il est seulement différent dans le remplissage avec ** zéros ** et ** blancs **? – user198729

+1

Donc '% .6d' est le même que'% 06d'? Blech, écoutons pour la cohérence. > _ < –

+0

Est-ce que '% .6d' est identique à'% 06d'? –

8

Le tampon ancien volonté avec des zéros, ce dernier avec des espaces.

#include <stdio.h> 
int main(void) { 
    printf ("%.6d\n", 123); 
    printf ("%6d\n", 123); 
    return 0; 
} 

produit la sortie suivante,

00
    123