C ++, WCHAR [] para std :: cout e comparação
Pergunta
Eu preciso colocar WCHAR [] para std :: cout ... É uma parte de PWLAN_CONNECTION_NOTIFICATION_DATA passou da Native Wifi callback API.
Eu tentei simplesmente std :: cout << var; mas ela mostra o endereço numérico de primeiro caractere. a comparação (var == L"some text"
) não quer trabalhar. O depurador retorna o valor esperado, porém os comparação retorna 0. Como posso converter essa matriz para uma cadeia de caracteres padrão (std :: string)?
Agradecemos antecipadamente
Solução
Assumindo var é um wchar_t *
, var == L"some text"
faz uma comparação ponteiro. Para comparar a string apontada por var, use uma função como wcscmp
.
Outras dicas
Algumas soluções:
- Escreva-std :: wcout vez
- Converter:
- A forma padrão, usando std :: codecvt
- A forma Win32, usando WideCharToMultiByte
Para imprimir a cout
, você deve usar std::wcout
vez.
Quanto à comparação, eu não tenho certeza do que você quer dizer.
- se
var
é umwchar_t[]
, então você está comparando dois ponteiros. E o resultado provavelmente será falso, porque enquanto o conteúdo de string pode ser o mesmo, eles estão fisicamente alocados em diferentes posições de memória. A resposta, quer seja para o uso de uma função comostrcmp
que compara cordas de estilo C (ponteiros carvão animal), ou para usar o ++ classe string C. - eo
operator==
normalmente retorna umbool
, não um inteiro. Assim, ele pode retornarfalse
, mas ele não pode retornar0
... A menos que você tenha criado alguns sobrecarga estranho a si mesmo. (E que só é possível sevar
é um tipo definido pelo usuário.
Use o seguinte
#ifdef UNICODE
#define tcout wcout
#else
#define tcout cout
#endif