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, "");
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.
N'utilisez pas "% * s" sur un tampon qui n'est pas terminé par NULL (emballé) en pensant qu'il imprimera uniquement le champ "longueur".
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);
.
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
* 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.