c - Que signifie le spécificateur de format% * s?

Translate

Dans certains codes 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 il est utilisé?

Un exemple de son utilisation est comme:

fprintf(outFile, "\n%*s", indent, "");
This question and all comments follow the "Attribution Required."

Toutes les réponses

Translate

Il est utilisé pour spécifier, de manière dynamique, la largeur du champ:

  • La largeur n'est pas spécifiée dans la chaîne de format, mais sous la forme d'un argument de valeur entière supplémentaire précédant l'argument à mettre en forme.

donc "indent" spécifie l'espace à allouer pour la chaîne qui le suit dans la liste des paramètres.

Alors,

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

est le même que

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

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

La source
Translate

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

La source
Translate

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ères.

Si la valeur à émettre estlessplus de 4 positions de caractères de large, la valeur estright justifiedsur le terrain par défaut.

Si la valeur estgreaterplus de 4 positions de caractères de large, la largeur du champexpandspour accueillir le nombre approprié de caractères.

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

Références:Java ™ How To Program (premiers objets), dixième édition

La source
Translate

* Fait remplir la sortie par fprintf jusqu'à ce qu'elle ait une largeur de n caractères, où n est une valeur entière stockée dans l'argument de fonction a juste avant celui représenté par le type modifié.

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

http://www.cplusplus.com/reference/clibrary/cstdio/printf/

La largeur n'est pas spécifiée dans la chaîne de format, mais sous la forme d'un argument de valeur entière supplémentaire précédant l'argument à mettre en forme.

par exemple:printf("%*s", 4, myValue);est équivalent àprintf("%4s", myValue);.

La source
Leave a Reply
You must be logged in to post a answer.
A propos de l'auteur