2015-10-01 88 views
0

我試圖將wstring *轉換爲PWSTR *。 根據http://devsolvd.com/questions/how-to-convert-std-string-to-lpcstr PWSTR是wchar_t *。所以PWSTR *是wchar_t **將wstring *轉換爲PWSTR

根據文檔http://en.cppreference.com/w/cpp/string/basic_string,wstring是wchar_t。所以wstring的*是whar_t *

wstring的轉換爲PWSTR,我想下面的表達式:

std::wstring *currentMetric =... 
PWSTR *metric=... 
*metric=currentMetric 

它得到錯誤 「不能轉換 '的std :: wstring的*' 到 'PWSTR'」 我不想使用c_str,因爲它返回PCWSTR,const_cast可以給PWSTR,但重新分配變量可能會導致數據損壞。

我想知道任何其他方法來做到這一點。

感謝

編輯: answer建議使用c_str(),但我想用比c_str()以外的東西

+1

您可以使用'c_str()'方法來訪問原始數據。 –

+1

匈牙利人受到譴責的情況很多。 wstring :: c_str()返回* const wchar_t *。 PCWSTR是*指向常量寬字符串*的指針。 PWSTR中沒有C。 –

+0

你包含了WinNT.h嗎? – Les

回答

0

這部分是不正確的:

按文件http://en.cppreference.com/w/cpp/string/basic_string ,wstring是wchar_t。所以wstring *是whar_t *

wstring是wchar_t *,而不是wchar_t的包裝。要訪問底層wchar_t *,請使用c_str成員函數。

+0

c_str返回PCWSTR。這是一個我不想要的常量變量類型。這就是爲什麼我想避免使用c_str。 – vivek

1

我找到了一種方法: * metric = &(* currentMetric)[0];

PS.I不想使用c_str,因爲它返回的可以是cons_cast到PWSTR的PCWSTR。但重新分配變量可能會導致數據損壞

+1

你應該仔細檢查這個指針將如何被使用,如果你將它傳遞給一個C函數來改變它的內容,你可能不得不重新同步它的長度(如果C函數截斷它)或者確保它足夠大到可以開始與(如果它是一個輸出緩衝區)。 –

+0

謝謝Matteo,我會檢查一次。 – vivek