在C語言中: string是字符串,而char*是字符指針。兩者不是在何時都等價,當字符指針指向的地址保存了一個字符串(即以‘\0’結尾的一個字符序列)時,能夠說它指向了一個字符串,其它狀況下則不等價。函數
在C++中: string是一個字符容器,它是模板庫裏的一個擴展模板類,而char是一個基本數據類型(C++的內置類型),兩者就更不等價了。其中string有構造函數,char沒有構造函數,只能夠賦值(char* m="abc"; string str(m);)指針
string轉char*: 使用c_str()方法。std::string str="abc"; char* p=str.c_str();
char*轉string: 直接使用初始化string s(char *),在不是初始化的地方,最好使用assign();code
CString 是一種頗有用的數據類型。它們很大程度上簡化了MFC中的許多操做,使得MFC在作字符串操做的時候方便了不少。能體現出 CString 類型方便性特色的一個方面就是字符串的鏈接,使用 CString 類型,你能很方便地鏈接兩個字符串,正以下面的例子:對象
CString gray("Gray"); CString cat("Cat"); CString graycat = gray + cat; //then graycat="GrayCat"
要比用下面的方法好得多:unicode
char gray[] = "Gray"; char cat[] = "Cat"; char * graycat = malloc(strlen(gray) + strlen(cat) + 1); strcpy(graycat,gray); strcat(graycat,cat);
CString->std::string 例子:字符串
CString strMfc=「test「; std::string strStl; strStl=strMfc.GetBuffer(0);
unicode情形下:string
CStringW strw = _T("test"); CStringA stra(strw.GetBuffer(0)); strw.ReleaseBuffer(); std::string imgpath=stra.GetBuffer(0); stra.ReleaseBuffer();
std::string->CString 例子:it
CString strMfc; std::string strStl=「test「; strMfc=strStl.c_str();
CString->char* 例子:模板
強制類型轉換LPCTSTRtest
LPCTSTR s;
或者
LPCTSTR(s);
使用Getbuffer():
不給 GetBuffer 傳遞參數時它使用默認值 0,意思是:「給我這個字符串的指針,我保證不加長它」。當調用 ReleaseBuffer 時,字符串的實際長度會被從新計算,而後存入 CString 對象中。 必須強調一點,在 GetBuffer 和 ReleaseBuffer 之間這個範圍,必定不能使用你要操做的這個緩衝的 CString 對象.由於 ReleaseBuffer 被調用以前,該 CString 對象的完整性得不到保障。
LPTSTR p = s.GetBuffer(); // do something with p int m = s.GetLength(); // 可能出錯!!! s.ReleaseBuffer(); int n = s.GetLength(); // 保證正確