sprintf pour _int64 non signé
Je vais avoir des code suivant. sortie de la deuxième %d dans sprintf est toujours montré comme zéro. Je pense que je suis en précisant mauvais prescripteurs. Quelqu'un peut-il m'aider à obtenir écrire chaîne avec les valeurs de droite. Ce qui a atteint dans la norme posix. Merci pour les entrées
void main() {
unsigned _int64 dbFileSize = 99;
unsigned _int64 fileSize = 100;
char buf[128];
memset(buf, 0x00, 128);
sprintf(buf, "\nOD DB File Size = %d bytes \t XML file size = %d bytes", fileSize, dbFileSize);
printf("The string is %s ", buf);
}
De sortie:
The string is
OD DB File Size = 100 bytes XML file size = 0 bytes
source d'informationauteur venkysmarty
Vous devez vous connecter pour publier un commentaire.
Je ne sais pas ce que POSIX a à dire à ce sujet, mais c'est bien gérée par le noyau des C99:
Si votre compilateur n'est pas C99 conforme, obtenir un autre compilateur. (Oui, je suis à la recherche à vous, Visual Studio).
PS: Si vous êtes inquiet au sujet de la portabilité, ne pas utilisation
%lld
. C'est pourlong long
mais il n'ya aucune garantie quelong long
est en fait la même que_int64
(POSIX) ouint64_t
(C99).Edit: Mea culpa - je plus ou moins brainlessly "recherche & remplacer"d la
_int64
avecint64_t
sans vraiment regarder ce que je fais. Merci pour les commentaires de souligner que c'estuint64_t
pasunsigned int64_t
. Corrigés.Vous devez utiliser %I64u avec Visual C++.
Cependant, sur la plupart compilateur C/C++, entier de 64 bits est long. Par conséquent, adopter à l'aide de long et l'utilisation %llu.
Si vous êtes à la recherche d'une solution portable, puis utilisez printf macros de
<inttypes.h>
. Vous devrez peut-être définir__STDC_FORMAT_MACROS
de les rendre disponibles en C++.