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

War es hilfreich?

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 ein wchar_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 wie strcmp zu verwenden, die C-Strings (char Zeiger), oder verwenden Sie die C ++ String-Klasse vergleicht.
  • und die operator== in der Regel gibt eine bool, nicht eine ganze Zahl. So kann es false zurückkehren, aber es kann nicht 0 zurückkehren ... Es sei denn, Sie einige seltsame Überlastung erstellt haben selbst. (Und das ist nur möglich, wenn var ein benutzerdefinierter Typ ist.

verwenden Sie die folgende

#ifdef UNICODE
#define tcout wcout
#else
#define tcout cout
#endif
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top