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é?

Voici un exemple d’utilisation:

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

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

  • 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.

so “indent” spécifie la quantité d’espace à allouer pour la chaîne qui la suit dans la liste de parameters.

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 à formater.

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

* 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. 

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 à 4 caractères, la valeur est right justified à right justified dans le champ par défaut.

Si la valeur est greater à 4 caractères, la largeur du champ expands 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: Programmation Java ™ (premiers objects), dixième édition