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?

¿Fue útil?

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top