J'ai un extrait de code dans lequel il y a un
printf("%.*s\n")
qu'est-ce que cela %.*s
signifie?
c
printf
format-specifiers
Shaobo Wang
la source
la source
printf
appel valide .Réponses:
Vous pouvez utiliser un astérisque (
*
) pour passer le spécificateur / précision de largeur àprintf()
, plutôt que de le coder en dur dans la chaîne de format, c.-à-d.la source
str_len
argument doit avoir un typeint
(ou un type intégral plus étroit, qui serait promu enint
). Ce serait un bug à passerlong
,size_t
etc.%s
, est d'imprimer une sous-chaîne de la chaîne d'origine. Dans ce cas d'utilisation,str
pointerait vers quelque part à l'intérieur de la chaîne d'origine (éventuellement au début), etstr_len
spécifierait la longueur de la sous-chaîne à imprimer.Plus de détails ici .
Donc, si nous essayons les deux spécifications de conversion
nous obtenons la sortie:
la source
Je ne pense pas que le code ci-dessus soit correct mais (selon cette description de
printf()
) les.*
moyensC'est donc une chaîne avec une largeur passable comme argument.
la source
int
(ou un sous-ensemble de celle-ci) - pas simplement n'importe quelle valeur intégrale comme plus intuitivesize_t
ou ses alias possibles, commestd::string::size_type
. Ceci est encore plus déroutant, en tenant compte du fait que la page référencée mentionnesize_t
comme l'un des spécificateurs de type pris en charge.Voir: http://www.cplusplus.com/reference/clibrary/cstdio/printf/
la source