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

È stato utile?

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 è un wchar_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 come strcmp che confronta le stringhe in stile C (puntatori char) o utilizzare la classe di stringhe C ++.
  • e operator== di solito restituisce un bool, non un numero intero. Quindi può restituire false, ma non può restituire 0 ... 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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top