Se si desidera convertire std::wstring
-const WCHAR*
(cioè il puntatore restituito dà accesso in sola lettura al contenuto della stringa), quindi chiamando std::wstring::c_str()
metodo è più che bene:
std::wstring wstrProcToSearch;
std::wcin >> wstrProcToSearch; // input std::wstring
// Convert to const WCHAR* (read-only access)
const WCHAR * wpszProcToSearch = wstrProcToSearch.c_str();
Invece, se si desidera modificare std::wstring
's, le cose sono diverse. È possibile utilizzare &wstr[0]
(dove wstr
è un'istanza non vuota di std::wstring
) per accedere al contenuto di std::wstring
(a partire dall'indirizzo dei suoi primi caratteri e notare che i caratteri sono memorizzati in modo contiguo nella memoria), ma è necessario prestare attenzione a non sovraccaricare la memoria pre-allocata della stringa.
In generale, se si dispone di un std::wstring
lunghezza L
, è possibile accedere ai caratteri dall'indice 0
a (L-1)
.
Overwriting the terminating '\0'
(che si trova nell'indice L
) è comportamento non definito (in pratica, è OK su Visual C++, almeno con VC9/VS2008 e VC10/VS2010).
Se la stringa non ha la dimensione corretta (vale a dire che non è abbastanza grande per le vostre esigenze), allora è possibile chiamare std::wstring::resize()
per fare spazio a nuovi personaggi (ad esempio il ridimensionamento interno tampone std::wstring
s'), e quindi utilizzare &wstr[0]
per leggere -write std::wstring
contenuto.
fonte
2013-04-19 21:20:19
'.c_str()', hm? –
http://en.cppreference.com/w/cpp/string/basic_string/c_str ... assumendo che 'const WCHAR *' è accettabile. –
Cosa c'è di sbagliato in 'const wchat_t *'? Cosa vuoi fare con esso? E odio davvero quei tipi di Windows! Non abbiamo bisogno di 'WCHAR'! –