Ответ 1
Если вы хотите конвертировать из std::wstring
в const WCHAR*
(т.е. возвращенный указатель предоставляет доступ только для чтения к содержимому строки), то вызов метода std::wstring::c_str()
выполняется нормально:
std::wstring wstrProcToSearch;
std::wcin >> wstrProcToSearch; // input std::wstring
// Convert to const WCHAR* (read-only access)
const WCHAR * wpszProcToSearch = wstrProcToSearch.c_str();
Вместо этого, если вы хотите изменить std::wstring
контент, все по-другому. Вы можете использовать &wstr[0]
(где wstr
- непустой экземпляр std::wstring
) для доступа к содержимому std::wstring
(начиная с адреса его первых символов и отмечая, что символы хранятся смежно в памяти), но вы должны обратить внимание на то, чтобы не перераспределять предварительно выделенную память.
В общем случае, если у вас есть std::wstring
длины L
, вы можете получить доступ к символам из индекса 0
до (L-1)
.
Замена завершающего '\0'
(находится в индексе L
) - это поведение undefined (на практике это ОК на Visual С++, по крайней мере, с VC9/VS2008 и VC10/VS2010).
Если строка имеет неправильный размер (т.е. она недостаточно велика для ваших нужд), вы можете вызвать std::wstring::resize()
, чтобы освободить место для новых символов (т.е. изменить размер внутреннего буфера std::wstring
), а затем использовать &wstr[0]
для чтения-записи std::wstring
.