C ++, WCHAR [] std :: cout und Vergleich
Frage
Ich brauche zu setzen WCHAR [] std :: cout ... Es ist ein Teil von PWLAN_CONNECTION_NOTIFICATION_DATA von Native Wifi weitergegeben API-Rückruf.
Ich habe versucht, einfach std :: cout << var; aber es gibt die numerische Adresse des ersten char aus. der Vergleich (var == L"some text"
) funktioniert auch nicht. Der Debugger gibt den erwarteten Wert, aber der Vergleich 0 zurück Wie kann ich dieses Array an einen Standard-String (std :: string) umwandeln?
Vielen Dank im Voraus
Lösung
Unter der Annahme, var ist ein wchar_t *
, var == L"some text"
macht einen Zeiger Vergleich. Um wies die Zeichenfolge zu vergleichen, die von var, verwenden Sie eine Funktion wie wcscmp
.
Andere Tipps
Einige Lösungen:
- Schreibe std :: wcout statt
- Convert:
- Die Standardmethode, mit std :: codecvt
- Die Win32 Art und Weise, mit WideCharToMultiByte
Für den Druck auf cout
, sollten Sie std::wcout
stattdessen verwenden.
Wie für den Vergleich, ich bin nicht wirklich sicher, was du meinst.
- wenn
var
einwchar_t[]
ist, dann vergleichen Sie zwei Zeiger. Und das Ergebnis wird höchstwahrscheinlich falsch sein, weil während der Zeichenfolge Inhalte die gleichen sein können, sind sie in verschiedenen Speicherstellen physikalisch zugeordnet sind. Die Antwort ist entweder eine Funktion wiestrcmp
zu verwenden, die C-Strings (char Zeiger), oder verwenden Sie die C ++ String-Klasse vergleicht. - und die
operator==
in der Regel gibt einebool
, nicht eine ganze Zahl. So kann esfalse
zurückkehren, aber es kann nicht0
zurückkehren ... Es sei denn, Sie einige seltsame Überlastung erstellt haben selbst. (Und das ist nur möglich, wennvar
ein benutzerdefinierter Typ ist.
verwenden Sie die folgende
#ifdef UNICODE
#define tcout wcout
#else
#define tcout cout
#endif