C ++, WCHAR [] a std :: cout e confronto
Domanda
Devo mettere WCHAR [] su std :: cout ... Fa parte di PWLAN_CONNECTION_NOTIFICATION_DATA trasmessa dal callback dell'API Wifi nativo.
Ho provato semplicemente std :: cout < < var; ma stampa l'indirizzo numerico del primo carattere. neanche il confronto (var == L"some text"
) non funziona. Il debugger restituisce il valore previsto, tuttavia il confronto restituisce 0. Come posso convertire questo array in una stringa standard (std :: string)?
Grazie in anticipo
Soluzione
Supponendo che var sia un wchar_t *
, var == L"some text"
esegue un confronto puntatore. Per confrontare la stringa indicata da var, utilizzare una funzione come wcscmp
.
Altri suggerimenti
Alcune soluzioni:
- Scrivi invece su std :: wcout
- Converti:
- Il modo standard, usando std :: codecvt
- Il modo Win32, usando WideCharToMultibyte
Per stampare su cout
, utilizzare invece std::wcout
.
Per quanto riguarda il confronto, non sono davvero sicuro di cosa intendi.
- se
var
è unwchar_t[]
, allora stai confrontando due puntatori. E il risultato sarà molto probabilmente falso, perché mentre il contenuto della stringa può essere lo stesso, sono allocati fisicamente in diverse posizioni di memoria. La risposta è utilizzare una funzione comestrcmp
che confronta le stringhe in stile C (puntatori char) o utilizzare la classe di stringhe C ++. - e
operator==
di solito restituisce unbool
, non un numero intero. Quindi può restituirefalse
, ma non può restituire0
... A meno che tu non abbia creato tu stesso uno strano sovraccarico. (e ciò è possibile solo se <=> è un tipo definito dall'utente.
usa il seguente
#ifdef UNICODE
#define tcout wcout
#else
#define tcout cout
#endif