總結CString、string、char*

(一)首先說說string和char*:

一、概述

在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

一、概述

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和其它二者之間的轉化

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(); // 保證正確
相關文章
相關標籤/搜索