Visual C ++ 6.0 con unsigned long long y sprintf
Pregunta
Quiero sprintf () un valor largo largo sin signo en 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);
da el resultado
12345678, (null), test1
(observe que test2
no se imprime)
y l = 123456789012345
da un identificador de excepción
alguna sugerencia?
Solución
Para imprimir un valor unsigned __int64
en Visual C ++ 6.0 debe usar %I64u
, no %lli
(consulte esta página en MSDN). <=> solo es compatible con Visual Studio 2005 y versiones posteriores.
Entonces, su código debe ser:
sprintf(buf, "%I64u, %s, %s", l, t1, t2);
Otros consejos
printf usa puntos suspensivos para pasar una lista de argumentos variables. El (nulo) que ve es la segunda parte de su largo largo, que son todos 0 bits. Ajústelo a 1 & Lt; & Lt; 60 + 1 & Lt; & Lt; 30 y obtendrá un bloqueo cuando la parte 1 & Lt; & Lt; 60 se interpreta como un char *.
La solución correcta sería dividir el número en tres partes de 10 dígitos, " valor muy largo% 10000000000 " " (valor muy largo / 10000000000)% 10000000000 " " valor muy largo / 100000000000000000000 " ;.
Aparentemente, no asignó additionaltext
a la char *
(cadena) necesaria. Tenga en cuenta que long int
se procesó, la coma se copió y solo %s
generó (null)
.