Ich versuche, zwei doppelte Werte in Zeichenfolgen in C++ zu konvertieren, so dass ich TRACE verwenden kann, um sie in meinem Ausgabefenster anzuzeigen. Ich bin mit Visual Studio 2017. Hier ist mein Haupt-Code:Konvertieren von Double in String in C++ gibt seltsame Zeichen (chinesische Zeichen?)
double distance = 3.0;
double secondsPassed = 10.0;
TRACE(L"Hello!\n");
TRACE(L"distance = %s seconds passed: %s \n",
std::to_string(distance).c_str(), std::to_string(secondsPassed).c_str());
Dies ist die Definition meiner TRACE-Funktion:
void TRACE(TCHAR *format, ...)
{
TCHAR buffer[1000];
va_list argptr;
va_start(argptr, format);
wvsprintf(buffer, format, argptr);
va_end(argptr);
OutputDebugString(buffer);
}
Dies ist, was in meinem Ausgabefenster zeigt nach oben:
Hello!
distance = ⸳〰〰〰 time: 〱〮〰〰0찀쳌쳌
Ich bin nicht sicher, warum die zwei Doppelwerte nicht in die Strings "3.0" und "10.0" konvertiert werden. Stattdessen bekomme ich diese komischen Charaktere! Ich entschuldige mich, wenn sie nicht chinesische Schriftzeichen sind, wie ich im Titel erwähnte - ich weiß nur Englisch
Alle Vorschläge oder Kommentare würden sehr geschätzt! Vielen Dank.
Dies scheint wie eine komplizierte Art, Dinge zu tun. Anstatt die Werte in Zeichenfolgen zu konvertieren, so dass sie der '% s'-Formatierungsdirektive entsprechen, warum lassen Sie sie nicht als' double's und verwenden Sie eine '% f'-Anweisung? –
die temporäre std :: string ist weg, wenn Sie eine const-Referenz zuweisen die temporäre Lebensdauer ist Garantie zu überleben, aber TRACE ist eine Variadic-Funktion. Erstellen Sie die Zeichenfolge, bevor die TRACE das Problem lösen wird –
@AlessandroTeruzzi wird diese Zeichenfolge nicht erst nach dem Aufruf der Funktion zerstört, zu der sie das Argument ist? – stijn