2009-06-16 7 views
33

Dans un code que je dois maintenir, j'ai vu un spécificateur de format %*s. Quelqu'un peut-il me dire ce que c'est et pourquoi est-il utilisé?Que signifie le spécificateur de format% * s?

Un exemple de son utilisation est comme:

fprintf(outFile, "\n%*s", indent, ""); 

Répondre

43

It's used to specify, in a dynamic way, what the width of the field is:

  • La largeur est pas spécifié dans la chaîne de format, mais comme un argument supplémentaire de la valeur de nombre entier précédant le argument qui doit être formaté.

donc « tiret » indique la quantité d'espace à allouer pour la chaîne qui le suit dans la liste des paramètres.

Ainsi,

printf("%*s", 5, ""); 

est le même que

printf("%5s", ""); 

C'est une belle façon de mettre des espaces dans votre fichier, évitant ainsi une boucle.

+0

Merci pour la clarification. J'ai un peu googlé mais je n'ai pas trouvé la réponse. – Aamir

+0

Je ne peux pas obtenir cela pour travailler avec sscanf –

+3

@EthanHeilman, le * signifie quelque chose de complètement différent dans la famille de fonctions scanf. –

0

* Fait que fprintf remplit la sortie jusqu'à n caractères larges, où n est une valeur entière stockée dans l'argument de fonction précédant celui représenté par le type modifié.

printf("%*d", 5, 10) //will result in "10" being printed with a width of 5. 
7

N'utilisez pas "% * s" sur un tampon qui n'est pas terminé par NULL (empaqueté) en pensant qu'il n'imprimera que le champ "longueur".

+10

Utilisez "%. * S" pour cela! –

0

Le spécificateur de format% 4s génère une chaîne dans une largeur de champ de 4, c'est-à-dire que printf affiche la valeur avec au moins 4 positions de caractère.

Si la valeur à sortir est less pour 4 positions de caractères, la valeur est right justified dans le champ par défaut.

Si la valeur est greater à 4 positions de caractères au maximum, la largeur de champ expands doit contenir le nombre de caractères approprié.

Pour justifier la valeur, utilisez un entier négatif pour spécifier la largeur du champ.

Références: Java™ How To Program (Early Objects), Tenth Edition