程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> VC >> vc教程 >> vc數據類型轉換大全

vc數據類型轉換大全

編輯:vc教程

因為一個MFC CString類的對象包含TCHAR類型的字符,所以確切的字符類型取決於你所定義的預處理符號。大體來說,CString 很像STL string,這意味著你必須把它當成不透明的對象,只能使用CString提供的方法來修改CString對象。CString有一個string所不具備的優點:CString具有接收MBCS和Unicode兩種字符串的構造函數,它還有一個LPCTSTR轉換符,所以你可以把CString對象直接傳給一個接收LPCTSTR的函數而不需要調用c_str()函數。

// ConstructingCString s1 = "char string"; 
// construct from a LPCSTRCString s2 = L"wide char string"; 
// construct from a LPCWSTRCString s3 ( '' '', 100 ); 
// pre-allocate a 100-byte buffer, fill with spacesCString s4 = "New window text";   // You can pass a CString in place of an LPCTSTR:  SetWindowText ( hwndSomeWindow, s4 );   // Or, equivalently, explicitly cast the CString:  SetWindowText ( hwndSomeWindow, (LPCTSTR) s4 );     

  你可以從你的字符串表中裝載一個字符串,CString的一個構造函數和LoadString()函數可以完成它。Format()方法能夠從字符串表中隨意的讀取一個具有一定格式的字符串。

// Constructing/loading from string tableCString s5 ( (LPCTSTR) IDS_SOME_STR );
// load from string tableCString s6, s7;  
// Load from string table.  s6.LoadString ( IDS_SOME_STR );  
// Load printf-style format string from the string table:  s7.Format ( IDS_SOME_FORMAT, "bob", nSomeStuff, ... ); 

  第一個構造函數看起來有點奇怪,但是這實際上是文檔說明的裝入一個字符串的方法。 注意,對一個CString變量,你可以使用的唯一合法轉換符是LPCTSTR。轉換成LPTSTR(非常量指針)是錯誤的。養成把一個CString變量轉換成LPTSTR的習慣將會給你帶來傷害,因為當你的程序後來崩潰時,你可能不知道為什麼,因為你到處都使用同樣的代碼而那時它們都恰巧正常工作。正確的得到一個指向緩沖區的非常量指針的方法是調用GetBuffer()方法。下面是正確的用法的一個例子,這段代碼是給一個列表控件中的項設定文字:

CString str = _T("new text");LVITEM item = {0};  item.mask = LVIF_TEXT;  item.iItem = 1;  item.pszText = (LPTSTR)(LPCTSTR) str;
// WRONG!  item.pszText = str.GetBuffer(0);  
// correct   ListVIEw_SetItem ( &item );str.ReleaseBuffer(); 
// return control of the buffer to str    

  pszText成員是一個LPTSTR變量,一個非常量指針,因此你需要對str調用GetBuffer()。GetBuffer()的參數是你需要CString為緩沖區分配的最小長度。如果因為某些原因,你需要一個可修改的緩沖區來存放1K TCHARs,你需要調用GetBuffer(1024)。把0作為參數時,GetBuffer()返回的是指向字符串當前內容的指針。

  上面劃線的語句可以被編譯,在這種情況下,甚至可以正常起作用。但這並不意味著這行代碼是正確的。通過使用非常量轉換,你已經破壞了面向對象的封裝,並對CString的內部實現作了某些假定。如果你有這樣的轉換習慣,你終將會陷入代碼崩潰的境地。你會想代碼為什麼不能正常工作了,因為你到處都使用同樣的代碼而那些代碼看起來是正確的。

  你知道人們總是抱怨現在的軟件的bug是多麼的多嗎?軟件中的bug是因為程序員寫了不正確的代碼。難道你真的想寫一些你知道是錯誤的代碼來為所有的軟件都滿是bug這種認識做貢獻嗎?花些時間來學習使用CString的正確方法讓你的代碼在任何時間都正常工作把。

  CString 有兩個函數來從一個 CString 創建一個 BSTR。它們是 AllocSysString() 和SetSysString()。
// Converting to BSTRCString s5 = "Bob!";BSTR bs1 = NULL, bs2 = NULL;  bs1 = s5.AllocSysString();  s5.SetSysString ( &bs2 );  SysFreeString ( bs1 );  SysFreeString ( bs2 ); 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved