這是一個很常見的問題,下面記錄下我的解決方案。
一、CString 轉化成char[]
方法一:運用 CString.GetBuffer(0) 與 strcpy
CString str;<br />int len = str.GetLength();<br />char* arr = new char[len];<br />strcpy(arr,str.GetBuffer(0));
二、char[]轉化成CString
首先我們就會想到下面的寫法
char ch[7] = {'w','u','d','i','z','h','u'};<br />CString szTest(ch);<br />AfxMessageBox(szTest);
或
char ch[7] = {'w','u','d','i','z','h','u'};<br />CString szTest;<br />szTest.Format("%s",ch);<br />AfxMessageBox(szTest);
可是運行結果都是:
在CString的最後多出了亂碼,而測試得到的CString對象的長度為7,這是為什麼呢?我想是這樣的:
CString 對象將ch 當做字串來處理的,所以在把一個char[]轉化成CString對象時,會分兩個過程:
1. 首先會把char[]轉化成char*,這個轉化就會在字串的結尾產生亂碼,測試如下:
char ch[2] = {'a','b'};<br />TRACE("%s",ch);
調試運行得到:
ab燙t
2. 把char*字串儲存在CString對象的CStringData 對象中,這是儲存的已經是存在亂碼的資料了,所以在輸出時
就出現了我們看到的亂碼。
到這裡或許大家都知道了亂碼的原因了吧。
下面就著手解決,這個自然就不是問題了,只要將數組的最後一位賦值為'/0'即可。
char ch[3] = {'a','b','/0'};<br />CString str;<br />str.Format("%s",ch);<br />AfxMessageBox(str);
結果如下:
至此問題解決