Domanda

Voglio sprintf () un valore long long senza segno in Visual C ++ 6.0 (semplice C).

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

fornisce il risultato

12345678, (null), test1

(osserva che test2 non è stampato)

e l = 123456789012345 fornisce un handle di eccezione

qualche suggerimento?

È stato utile?

Soluzione

Per stampare un unsigned __int64 valore in Visual C ++ 6.0 è necessario utilizzare %I64u, non %lli (fare riferimento a questa pagina su MSDN). <=> è supportato solo in Visual Studio 2005 e versioni successive. Quindi, il tuo codice dovrebbe essere:

sprintf(buf, "%I64u, %s, %s", l, t1, t2);

Altri suggerimenti

printf usa i puntini di sospensione per passare un elenco di argomenti variabili. Il (null) che vedi è la seconda parte del tuo long long, che risulta essere tutti 0 bit. Impostalo su 1 & Lt; & Lt; 60 + 1 & Lt; & Lt; 30 e otterrai un crash come 1 & Lt; & Lt; 60 parte viene interpretato come un carattere *.

La soluzione corretta sarebbe quella di scomporre il numero in tre parti di 10 cifre, " valore molto lungo% 10000000000 " " (valore molto lungo / 10000000000)% 10000000000 " & Quot; verylongvalue / 100.000.000.000 miliardi quot &;.

Apparentemente, non hai assegnato additionaltext al char * (stringa) necessario. Si noti che long int è stato elaborato, la virgola è stata copiata e solo il %s generato (null).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top