web-dev-qa-db-fra.com

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

Dans certains codes que je dois gérer, 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, "");
39
Aamir

Il sert à spécifier, de manière dynamique, quelle est la largeur du champ :

  • La largeur n'est pas spécifiée dans la chaîne de format, mais en tant que .__ supplémentaire. argument de valeur entier précédant le argument qui doit être formaté.

so "indent" spécifie la quantité d'espace à allouer pour la chaîne qui la suit dans la liste de 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.

48
akappa

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

8
user2132064

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

La largeur n'est pas spécifiée dans la chaîne de format, mais en tant qu'argument de valeur entière supplémentaire précédant l'argument devant être formaté.

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

1
pauldoo

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

Si la valeur à afficher est less inférieure à 4 caractères, la valeur est right justified dans le champ par défaut.

Si la valeur est greater large de 4 caractères, la largeur du champ expands convient au nombre de caractères approprié.

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

Références: Programmation Java ™ (premiers objets), Dixième édition

1
Basheer AL-MOMANI

* Fait en sorte que fprintf complète la sortie jusqu'à n caractères, où n est une valeur entière stockée dans l'argument d'une 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.
0
jitter