2014-06-30 79 views

回答

0

要從CString轉換爲TCHAR *只需使用GetBuffer函數(http://msdn.microsoft.com/en-us/library/aa314880%28v=vs.60%29.aspx)。

請注意,這可以讓您使用CStrings與Win32 API函數返回字符串作爲輸出參數,如下所示。

假設GetStr函數具有以下原型。

void GetStr(TCHAR *str, size_t s); 

您可以使用CString作爲第一個參數調用GetStr,如下所示。

CString str; 
GetStr(str.GetBuffer(1024), 1024); 
str.ReleaseBuffer(); 

對GetBuffer的調用實際上會分配足夠的內存來存儲1024個字符。

請注意,調用ReleaseBuffer至關重要。否則會有內存泄漏。

+2

在GetBuffer之後調用'ReleaseBuffer'是強制性的,但不是因爲你說的原因。不會有內存泄漏。但是'CString'對象可能處於不一致的狀態,並且結果可能不是很好定義。函數'ReleaseBuffer'沒有做它的名字所暗示的;它不會釋放任何緩衝區,而是修正CString對象的內部狀態(如字符串長度等)。 – IInspectable

+0

@IInspectable這是正確的,但是(根據MSDN),如果您已經使用由GetBuffer返回的指針來更改字符串內容,則只需調用ReleaseBuffer即可。一般來說,我寧願遠離這種不確定性。 –