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?

War es hilfreich?

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top