71 votes

Quelle est la bonne façon d'utiliser printf pour imprimer un fichier size_t?

Size_t est défini comme un entier non signé, mais sa taille dépend de si vous êtes sur un ordinateur 32 ou 64 bits. Quelle est la manière correcte et portable d’imprimer un fichier size_t?

106voto

JaredPar Points 333733

Essayez d'utiliser la chaîne de format% zu

 size_t val = get_the_value();
printf("%zu",val);
 

La partie z est un spécificateur de longueur qui indique que l'argument aura la taille size_t.

Source - http://fr.wikipedia.org/wiki/Printf#printf_format_placeholders

9voto

David Thornley Points 39051

Il y a un C++ tag sur ce point, cout << est une autre réponse possible.

C'est étonnamment difficile à obtenir le droit dans toutes les versions de C. En C90, la conversion en unsigned long devrait fonctionner, mais qui peut très bien ne pas travailler en C99, et le C99 solutions ne fonctionnera pas nécessairement en C90. La capacité de distinguer de manière fiable entre C90 et C99 a été introduit dans les modifications de 1995 (en spécifiant les valeurs admissibles pour __STDC__). Je ne pense pas qu'il est complètement portable manière qui fonctionne pour C90, C99, et C++, bien qu'il existe des solutions pour tout individu de l'un de ceux-ci.

7voto

D.Shawley Points 30324

Je pense que le C++ réponse est:

std::size_t n = 1;
std::cout << n;

Pour le style C IO c'est un peu plus compliqué. En C99, ils ont ajouté l' z modificateur de longueur pour size_t valeurs. Cependant, les précédentes à TR1 ce n'est pas pris en charge si vous êtes de gauche avec un casting pour une taille spécifique comme:

std::size_t n = 1;
std::printf("%lu\n", static_cast<unsigned long>(n));

Puis de nouveau, unsigned long long n'est pas vraiment pris en charge par le C++, de sorte que les ci-dessus fonctionne très bien depuis unsigned long est le plus grand juridiques de type intégral. Après TR1 vous pouvez utiliser %zu en toute sécurité pour size_t valeurs.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X