CString與char[] 的相互轉換方法以及結尾亂碼問題的分析解決

來源:互聯網
上載者:User

  這是一個很常見的問題,下面記錄下我的解決方案。

 

一、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);

結果如下:

 

 

 

至此問題解決

 

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.