Que signifie le spécificateur de format% * s?
-
05-07-2019 - |
Question
Dans certains codes que je dois gérer, j'ai vu un spécificateur de format % * s
. Quelqu'un peut-il me dire en quoi cela consiste et pourquoi il est utilisé?
Voici un exemple d'utilisation:
fprintf(outFile, "\n%*s", indent, "");
La solution
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 en tant que valeur 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 identique à
printf("%5s", "");
C'est un bon moyen de mettre des espaces dans votre fichier, en évitant une boucle.
Autres conseils
N'utilisez pas "% * s " sur un tampon qui n'est pas terminé par NULL (emballé) en pensant qu'il n'imprimera que "durée" champ.
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 à formater.
Exemple: printf ("% * s", 4, myValue);
correspond à printf ("% 4s", myValue);
. . p>
Le spécificateur de format% 4s génère une chaîne d'une largeur de champ de 4 & # 8212; autrement dit, printf affiche la valeur avec au moins 4 positions de caractères.
Si la valeur à afficher est inférieur
à 4 caractères sur 1, la valeur est justifié à droite
dans le champ par défaut.
Si la valeur est supérieure
à 4 caractères sur la largeur, la largeur de champ est étendue
pour accueillir le 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: Java & # 8482; Comment programmer (premiers objets), Dixième édition
* Force fprintf à remplir la sortie jusqu'à ce qu'elle ait une largeur de 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.