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?

Était-ce utile?

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).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top