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?
Réponses
Trop de publicités?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
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.
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.