C ++, WCHAR [] à std :: cout et comparaison
Question
Je dois mettre WCHAR [] dans std :: cout ... C'est une partie de PWLAN_CONNECTION_NOTIFICATION_DATA transmise à partir du rappel de l'API Wifi native.
J'ai simplement essayé std :: cout < < var; mais il affiche l'adresse numérique du premier caractère. la comparaison (var == L"some text"
) ne fonctionne pas non plus. Le débogueur renvoie la valeur attendue, mais la comparaison renvoie 0. Comment puis-je convertir ce tableau en chaîne standard (std :: string)?
Merci d'avance
La solution
En supposant que var est wchar_t *
, var == L"some text"
effectue une comparaison de pointeur. Pour comparer la chaîne pointée par var, utilisez une fonction telle que wcscmp
.
Autres conseils
Quelques solutions:
- Ecrivez à la place std :: wcout
- Convertir:
- La manière standard, en utilisant std :: codecvt
- La manière Win32, en utilisant WideCharToMultibyte
Pour imprimer sur cout
, vous devez utiliser std::wcout
à la place.
En ce qui concerne la comparaison, je ne suis pas vraiment sûr de ce que vous voulez dire.
- si
var
est unwchar_t[]
, vous comparez deux pointeurs. Et le résultat sera probablement faux, car même si le contenu de la chaîne peut être identique, il est physiquement alloué dans des emplacements mémoire différents. La solution consiste à utiliser une fonction telle questrcmp
qui compare les chaînes de style C (pointeurs de caractères) ou à utiliser la classe de chaînes C ++. - et le
operator==
retourne généralement unbool
, pas un entier. Donc, il peut retournerfalse
, mais pas0
... sauf si vous avez créé une surcharge étrange vous-même. (et cela n'est possible que si <=> est un type défini par l'utilisateur.
utilisez ce qui suit
#ifdef UNICODE
#define tcout wcout
#else
#define tcout cout
#endif