C++字串完全指南(2) – MFC類

來源:互聯網
上載者:User

C++字串完全指南(2) - MFC類

作者: 翻譯:連波
2002-11-22 12:50 PM

MFC類

 

 

CString

MFC的CString含有TCHAR,它的實際字元類型取決於預先處理標記的設定。通常,CString象STL字串一樣是不透明對象,只能用CString的方法來修改。CString比STL字串更優越的是它的建構函式接受MBCS和Unicode字串。並且可以轉換為LPCTSTR,因此可以向接受LPCTSTR的函數直接傳遞CString對象,不必調用c_str()方法。

// 構造CString s1 = "char string"; // 從LPCSTR構造CString s2 = L"wide char string"; // 從LPCWSTR構造CString s3 ( ' ', 100 ); // 預分配100位元組,填充空格CString s4 = "New window text";// 可以在LPCTSTR處使用CString:SetWindowText ( hwndSomeWindow, s4 );// 或者,顯式地做強制類型轉換:SetWindowText ( hwndSomeWindow, (LPCTSTR) s4 );

也可以從字串表載入字串。CString通過LoadString()來構造對象。用Format()方法可有選擇地從字串表讀取一定格式的字串。

// 從字串表構造/載入CString s5 ( (LPCTSTR) IDS_SOME_STR );  // 從字串表載入CString s6, s7;// 從字串表載入  s6.LoadString ( IDS_SOME_STR );// 從字串表載入列印格式的字串  s7.Format ( IDS_SOME_FORMAT, "bob", nSomeStuff, ... );

第一個建構函式看上去有點怪,但它的確是文檔標定的字串載入方式。

注意,CString只允許一種強制類型轉換,即強制轉換為LPCTSTR。強制轉換為LPTSTR (非常量指標)是錯誤的。按照老習慣,將CString強制轉換為LPTSTR只能傷害自己。有時在程式中沒有發現出錯,那隻是碰巧。轉換到非常量指標的正確方法是調用GetBuffer()方法。

下面以往隊列加入元素為例說明如何正確地使用CString:

CString str = _T("new text");LVITEM item = {0};item.mask = LVIF_TEXT;  item.iItem = 1;  item.pszText = (LPTSTR)(LPCTSTR) str; // 錯!  item.pszText = str.GetBuffer(0);      // 正確ListView_SetItem ( &item );  str.ReleaseBuffer();  // 將隊列返回給str

pszText成員是LPTSTR,一個非常量指標,因此要用str的GetBuffer()。GetBuffer()的參數是CString分配的最小緩衝區。如果要分配一個1K的TCHAR,調用GetBuffer(1024)。參數為0,只返回指向字串的指標。

上面樣本的出錯語句可以通過編譯,甚至可以正常工作,如果恰好就是這個類型。但這不證明文法正確。進行非常量的強制類型轉換,打破了物件導向的封裝原則,並逾越了CString的內部操作。如果你習慣進行這樣的強制類型轉換,終會遇到出錯,可你未必知道錯在何處,因為你到處都在做這樣的轉換,而代碼也都能運行。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.