Visual C ++ 6.0 avec unsigned long long et sprintf
Question
Je souhaite sprintf () une valeur longue longue non signée dans Visual C ++ 6.0 (C simple).
char buf[1000]; //bad coding
unsigned __int64 l = 12345678;
char t1[6] = "test1";
char t2[6] = "test2";
sprintf(buf, "%lli, %s, %s", l, t1, t2);
donne le résultat
12345678, (null), test1
(veillez à ce que test2
ne soit pas imprimé)
et l = 123456789012345
il donne un descripteur d'exception
des suggestions?
La solution
Pour imprimer une unsigned __int64
valeur dans Visual C ++ 6.0, vous devez utiliser %I64u
et non %lli
(voir cette page sur MSDN). <=> est uniquement pris en charge dans Visual Studio 2005 et les versions ultérieures.
Donc, votre code devrait être:
sprintf(buf, "%I64u, %s, %s", l, t1, t2);
Autres conseils
printf utilise les points de suspension pour transmettre une liste d'arguments variables. Le (null) que vous voyez est la deuxième partie de votre long long, qui se trouve être tous les 0 bits. Réglez-le sur 1 & Lt; & Lt; 60 + 1 & Lt; & Lt; 30; et vous obtiendrez un crash sous le 1 & Lt; & Lt; 60 parties. est interprété comme un caractère *.
La bonne solution serait de décomposer le nombre en trois parties de 10 chiffres, & "verylongvalue% 10000000000 &"; " (verylongvalue / 10000000000)% 10000000000 " " verylongvalue / 100000000000000000000 ".
Apparemment, vous n'avez pas affecté additionaltext
à la char *
(chaîne) nécessaire. Notez que le long int
a été traité, la virgule copiée et seul le %s
généré (null)
.