1. 程式人生 > >MFC中CString與string的區別以及相互轉換關係

MFC中CString與string的區別以及相互轉換關係

區別:

CString 類是微軟的visual c++提供的MFC裡面的一個類,所以只有支援MFC的工程才可以使用。如在linux上的工程就不能用CString了,只能用標準C++中的 string類了。另外,因為string類是在c++標準庫中,所以它被封裝在了std名稱空間中,使用之前需要宣告using namespace std;而CString類並不在std名稱空間中,因為它不是c++的標準庫,只是微軟的一個封裝庫。這點看來用string類的程式的移植性更好。

(1)string 是 語言的東西 是c++語言的CString 是VC++ IDE內嵌的,是MFC的 。不是一個概念。          CString 離開
VC++
不能用string 在任何支援C++的IDE中都能用
(2)string類既是一個標準c++的類庫,同時也是STL(Standard Template Library,標準模版庫)中的類庫,所以支援Iterator操作。
(3)CString類和string類提供的方法介面並不完全相同,所以不要糊里糊塗的認為某個類中怎麼沒有另外一個類中的方法啊。:-)。。

(4)他們和char*之間的轉換方法也不一樣。

轉換:

(1)如果在MFC的UNICODE環境下,兩者轉換比較麻煩:

//方法一
CString theCStr;
std::string STDStr( CW2A( theCStr.GetString() ) );
//方法二
CString m_Name;
CT2CA pszName(m_Name);
std::string m_NameStd(pszName);
//方法三
CString str = L"Test";
std::wstring ws(str);
std::string s; 
s.assign(ws.begin(), ws.end());

(2)如果在多字符集的環境下,就比較簡單:

1.string -> CString   :CString.format("%s", string.c_str());    (用c_str()確實比data()要好. )

2,CString -> string :string s(CString.GetBuffer()); (GetBuffer()後一定要ReleaseBuffer(),否則就沒有釋放緩衝區所佔的空間.