webentwicklung-frage-antwort-db.com.de

Wie initialisiere und drucke ich einen std :: wstring?

Ich hatte den Code:

std::string st = "SomeText";
...
std::cout << st;

und das hat gut funktioniert. Aber jetzt möchte mein Team zu wstring wechseln. Also habe ich versucht:

std::wstring st = "SomeText";
...
std::cout << st;

aber das gab mir einen Kompilierungsfehler:

Fehler 1 Fehler C2664: 'std :: basic_string <_Elem, _Traits, _Ax> :: basic_string (const std :: basic_string <_Elem, _Traits, _Ax> &)': Parameter 1 kann nicht von 'const char [8]' in konvertiert werden 'const std :: basic_string <_Elem, _Traits, _Ax> &' D: ...\TestModule1.cpp 28 1 TestModule1

Nach dem Durchsuchen des Webs habe ich gelesen, dass ich es definieren sollte als:

std::wstring st = L"SomeText"; // Notice the "L"
...
std::cout << st;

dies kompiliert aber druckt "0000000000012342" Anstatt von "SomeText".

Was mache ich falsch ?

51
Roee Gavirel

Um einen wstring anzuzeigen, benötigen Sie auch eine breite Version von cout - wcout.

std::wstring st = L"SomeText";
...
std::wcout << st; 
86
Bo Persson

Verwenden std::wcout Anstatt von std::cout.

12
hmjd

Diese Antwort bezieht sich auf das "C++/CLI" -Tag und die zugehörige Windows C++ - Konsole.

Wenn Sie in std :: wstring Multibyte-Zeichen haben, müssen zwei weitere Schritte ausgeführt werden, damit dies funktioniert:

  1. Überschriften einbeziehen
    #include <io.h>
    #include <fcntl.h>
  2. Stellt den Standardmodus ein
    _setmode(_fileno(stdout), _O_U16TEXT)

Ergebnis: Multi-bytes console

8
Val

versuche es mit use std::wcout<<st es wird dein Problem beheben.

std::wstring st = "SomeText";
...
std::wcout << st;
6
Hemant Metalia