J'ai un extrait de code dans lequel il y a un
printf("%.*s\n")
que fait le %.*s
signifier?
Vous pouvez utiliser un astérisque (*
) Pour transmettre le spécificateur de largeur/précision à printf()
, plutôt que de le coder en dur dans la chaîne de formatage, c.-à-d.
void f(const char *str, int str_len)
{
printf("%.*s\n", str_len, str);
}
Plus détaillé ici .
valeur entière ou
*
qui spécifie la largeur minimale du champ. Le résultat est complété avec des espaces (par défaut), si nécessaire, à gauche lorsque justifié à droite, ou à droite si justifié à gauche. Dans le cas où * est utilisé, la largeur est spécifiée par un argument supplémentaire de type int. Si la valeur de l'argument est négative, il en résulte l'option - flag spécifiée et la largeur du champ positif. (Remarque: il s'agit de la largeur minimale: la valeur n'est jamais tronquée.)
.
suivi d'un nombre entier ou *, ou ni l'un ni l'autre qui spécifie la précision de la conversion. Dans le cas où * est utilisé, la précision est spécifiée par un argument supplémentaire de type int. Si la valeur de cet argument est négative, elle est ignorée. Si ni un nombre ni * n'est utilisé, la précision est prise à zéro. Voir le tableau ci-dessous pour les effets exacts de la précision.
Donc, si nous essayons les deux spécifications de conversion
#include <stdio.h>
int main() {
int precision = 8;
int biggerPrecision = 16;
const char *greetings = "Hello world";
printf("|%.8s|\n", greetings);
printf("|%.*s|\n", precision , greetings);
printf("|%16s|\n", greetings);
printf("|%*s|\n", biggerPrecision , greetings);
return 0;
}
nous obtenons la sortie:
|Hello wo|
|Hello wo|
| Hello world|
| Hello world|
Je ne pense pas que le code ci-dessus soit correct mais (selon cette description de printf()
) le .*
veux dire
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. '
C'est donc une chaîne avec une largeur passable en argument.
Voir: http://www.cplusplus.com/reference/clibrary/cstdio/printf/
.*
La précision n'est pas spécifiée dans la chaîne de format, mais sous forme d'argument de valeur entière supplémentaire précédant l'argument à formater.
s
Chaîne de caractères