1 string to CString
CString.format("%s",string.c_str());
2 CString to string
string str(CString.GetBuffer());
CString.ReleaseBuffer()
3 string to char *
char *p=string.c_str();
4 char * to string
string str(char*);
5 CString to char *
strcpy(char,CString,sizeof(char));
6 char * to CString
CString.format("%s",char*);
CString的format方法是非常好用的。string的c_str()也是非常常用的,但要注意和char *轉換時,要把char定義成為const char*,這樣是最安全的。
有一篇檔案CString 操作指南,比較深刻
http://www.vckbase.com/document/viewdoc/?id=1094
GetBuffer,它的作用是返回一個可寫的緩衝指標
關於ReleaseBuffer
當你調用 ReleaseBuffer 時,字串的實際長度會被重新計算,然後存入 CString 對象中。
必須強調一點,在 GetBuffer 和 ReleaseBuffer 之間這個範圍,一定不能使用你要操作的這個緩衝的 CString 對象的任何方法。因為 ReleaseBuffer 被調用之前,該 CString 對象的完整性得不到保障。
例子:
CString s(...);
LPTSTR p = s.GetBuffer();
//... 這個指標 p 發生了很多事情
int n = s.GetLength(); // 很糟D!!!!! 有可能給出錯誤的答案!!!
s.TrimRight(); // 很糟!!!!! 不能保證能正常工作!!!!
s.ReleaseBuffer(); // 現在應該 OK
int m = s.GetLength(); // 這個結果可以保證是正確的。
s.TrimRight(); // 將正常工作。
MFC中ReleaseBuffer的代碼:
void ReleaseBuffer( int nNewLength = -1 )
{
if( nNewLength == -1 )
{
nNewLength = StringLength( m_pszData );
}
SetLength( nNewLength );
}很明顯ReleaseBuffer只有一個作用,就是更新字串的長度。