Ce n' “%.*s” dans printf?
J'ai eu un extrait de code dans lequel il y a un
printf("%.*s\n")
ce qui ne l' %.*s
veux dire?
- Sans autres arguments, qui n'est pas valide
printf
appel.
Vous devez vous connecter pour publier un commentaire.
J'ai eu un extrait de code dans lequel il y a un
printf("%.*s\n")
ce qui ne l' %.*s
veux dire?
printf
appel.Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser un astérisque (
*
) pour passer le spécificateur de largeur/de précision àprintf()
, plutôt que le codage en dur dans la chaîne de format, c'est à direstr_len
argument doit être de typeint
(ou plus étroite, de type intégral, ce qui serait promuint
). Il serait un bug de passerlong
,size_t
, etc.%s
, est à l'impression d'une sous-chaîne de la chaîne d'origine. Dans ce cas d'utilisation,str
serait quelque part à l'intérieur de la chaîne d'origine (peut-être au début), etstr_len
permettra de spécifier la longueur de la sous-chaîne de caractères qui doit être imprimé.Je ne pense pas que le code ci-dessus est correcte, mais (d'après cette description de
printf()
) le.*
signifieC'est donc une chaîne de caractères avec un praticable largeur comme argument.
int
(ou un sous-ensemble de celui-ci) pas seulement la valeur intégrale comme la plus intuitivesize_t
ou de ses éventuels alias, commestd::string::size_type
. C'est encore plus de confusion, en tenant compte que les renvois de page mentionnesize_t
comme l'un de prise en charge des spécificateurs de type.Plus détaillée ici.
Donc, si nous essayons à la fois spécification de conversion
nous obtenir la sortie:
Voir: http://www.cplusplus.com/reference/clibrary/cstdio/printf/