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

Foi útil?

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 é um wchar_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 como strcmp que compara cordas de estilo C (ponteiros carvão animal), ou para usar o ++ classe string C.
  • eo operator== normalmente retorna um bool, não um inteiro. Assim, ele pode retornar false, mas ele não pode retornar 0 ... A menos que você tenha criado alguns sobrecarga estranho a si mesmo. (E que só é possível se var é um tipo definido pelo usuário.

Use o seguinte

#ifdef UNICODE
#define tcout wcout
#else
#define tcout cout
#endif
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top