Jeśli chcesz przekonwertować z std::wstring
do const WCHAR*
(czyli zwrócony wskaźnik daje dostęp tylko do odczytu do treści strun), następnie wywołanie std::wstring::c_str()
metoda jest po prostu w porządku:
std::wstring wstrProcToSearch;
std::wcin >> wstrProcToSearch; // input std::wstring
// Convert to const WCHAR* (read-only access)
const WCHAR * wpszProcToSearch = wstrProcToSearch.c_str();
Zamiast tego, jeśli chcesz modyfikowaćstd::wstring
- treści są różne. Możesz użyć &wstr[0]
(gdzie wstr
jest niepustą instancją std::wstring
), aby uzyskać dostęp do zawartości std::wstring
(zaczynając od adresu pierwszych znaków i zauważając, że znaki są przechowywane w pamięci w sposób ciągły), ale musisz zwrócić uwagę na nie ma wstępnie przydzielonej pamięci ciągu.
W ogóle, jeśli masz std::wstring
długości L
, można uzyskać dostęp do znaków z indeksu 0
do (L-1)
.
Overwriting the terminating '\0'
(znajdujący się w indeksie L
) to niezdefiniowane zachowanie (w praktyce jest to w porządku w Visual C++, przynajmniej z VC9/VS2008 i VC10/VS2010).
Jeśli łańcuch nie ma właściwego rozmiaru (czyli nie jest wystarczająco duży dla swoich potrzeb), następnie możesz zadzwonić std::wstring::resize()
aby zrobić miejsce dla nowych znaków (czyli zmiany rozmiaru wewnętrznego bufora std::wstring
„s), a następnie użyć &wstr[0]
czytać -write std::wstring
- treść.
'.c_str()', hm? –
http://en.cppreference.com/w/cpp/string/basic_string/c_str ... zakładając, że "const WCHAR *" jest dopuszczalne. –
Co jest nie tak z 'const wchat_t *'? Co chcesz z tym zrobić? I naprawdę nienawidzę tych typów Windows! Nie potrzebujemy 'WCHAR'! –