Visual C ++ 6.0 mit unsigned long long und sprintf
Frage
ich will () einen unsigned long long-Wert in Visual C ++ 6.0 (Ebene C) sprintf.
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);
gibt das Ergebnis
12345678, (null), test1
(aufpassen, dass test2
nicht gedruckt wird)
und l = 123456789012345
es gibt eine Ausnahme handle
irgendwelche Vorschläge?
Lösung
ein unsigned __int64
Wert in Visual drucken C ++ 6.0 Sie sollten %I64u
verwenden, nicht %lli
(siehe diese Seite auf MSDN). %lli
wird nur in Visual Studio 2005 und neueren Versionen unterstützt.
Also, sollten Sie den Code sein:
sprintf(buf, "%I64u, %s, %s", l, t1, t2);
Andere Tipps
printf verwendet den Auslassungs eine variable Argumentliste zu übergeben. Die (null) Sie sehen, ist der zweite Teil Ihrer lang lang, was passieren alle 0-Bits sein. Stellen Sie sich auf 1 << 60 + 1 << 30 und Sie erhalten einen Absturz als 1 << 60 Teil erhalten wird als Zeichen interpretiert *.
Die richtige Lösung wäre, die Zahl in drei Teilen von 10 Stellen zu brechen "verylongvalue% 10000000000" "(verylongvalue / 10000000000)% 10000000000" "verylongvalue / 100000000000000000000".
Offensichtlich Sie nicht additionaltext
auf die notwendige char *
(string) zuweisen. Beachten Sie, dass der long int
verarbeitet wurde, wurde das Komma kopiert und nur die %s
erzeugt (null)
.