CString,string,char 之間的轉換

2021-08-02 22:03:42 字數 1862 閱讀 5873

cstring/string/char*

區別及其轉化

利用mfc進行程式設計時,我們從對話方塊中利用getwindowtext得到的字串是cstring型別,cstring是屬於mfc的類。而一些標準c/c++庫函式是不能直接對cstring型別進行操作的,所以我們經常遇到將cstring型別轉化char*等等其他資料型別的情況。這裡總結備忘於此!

首先要明確,標準c中是不存在string型別的,string是標準c++擴充字串操作的乙個類。但是我們知道標準c中有string.h這個標頭檔案,這裡要區分清楚,此string非彼string。string.h這個標頭檔案中定義了一些我們經常用到的操作字串的函式,如:strcpy、strcat、strcmp等等,但是這些函式的操作物件都是char*指向的字串。 而c++的string類操作物件是string型別字串,該類重灌了一些運算子,新增了一些字串操作成員函式,使得操作字串更加方便。有的時候我們要將string串和char*串配合使用,所以也會涉及到這兩個型別的轉化問題。

以下我用簡單的圖示指出三者之間的關係,並以標號對應轉換的方法。

1 string to cstring   

cstring.format("%s",string.c_str()); 

2 cstring to string

string str(cstring.getbuffer(str.getlength()));

3 string to char *

char *p=string.c_str();

4 char * to string

string str(char*);

5 cstring to char *

strcpy(char,cstring,sizeof(char));

6 char * to cstring

cstring.format("%s",char*);

cstring的format方法是非常好用的。string的c_str()也是非常常用的,但要注意和char *轉換時,要把char定義成為const char*,這樣是最安全的。

以上函式unicode編碼也沒問題:

unicode下照用,加個_t()巨集就行了,像這樣子_t("%s")

補充:cstring 可能是 cstringw/cstringa,在與 string 轉換時,如果是 cstringw,還涉及編碼轉換問題。下面以 cstringa 來說明。

1 string to cstring  

cstring.format("%s",string.c_str());

cstringa = string.c_str() 就可以了

2 cstring to string

string str(cstring.getbuffer(str.getlength()));

getbuffer 有引數的話,可能導致內部的分配空間動作,要進行後續 releasebuffer 操作。

string = cstringa

string = cstringa.getbuffer();

3 string to char *

char *p=string.c_str();

4 char * to string

string str(char*);

5 cstring to char *

strcpy(char 

*,cstring

,sizeof(char));

按照 3 風格,這裡應該 char *  = cstringa; 或者 char *p = cstringa.getbuffer();

6 char * to cstring

cstringa = char * 就可以了

CString,string,char 之間的轉換

1 string to cstring cstring.format s string.c str 2 cstring to string string str cstring.getbuffer str.getlength 3 string to char char p string.c str ...

CString,string,char 之間的轉換

以下我用簡單的圖示指出三者之間的關係,並以標號對應轉換的方法。1 string to cstring cstring.format s string.c str 2 cstring to string string str cstring.getbuffer str.getlength 3 stri...

CString,string,char 之間的轉換

以下我用簡單的圖示指出三者之間的關係,並以標號對應轉換的方法。1 string to cstring cstring.format s string.c str 2 cstring to string string str cstring.getbuffer str.getlength 3 stri...