天天看點

CString、string、char*之間的差別和轉換

一、差別

CString和string均是字元串模闆類。

CString為Visual C++中最常用的字元串類,主要應用在MFC和ATL程式設計中,安全性最高,但可移植性最差。

string為标準模闆類(STL)定義的字元串類,已經納入C++标準之中,使用STL時必不可少的類型,是以是做工程時必須熟練掌握的。

char*為C程式設計中最常用的字元串指針,一般以'\0'為結束标志。

string是友善的,可以從幾乎所有的字元串構造而來,包括CString和char*;

CString次之,可以從基本的一些字元串變量構造而來,包括char*等;

char*沒有構造函數,僅可以指派。

二、轉換

2.1CString轉換string、char*

【CString轉string】

CString result;

string str = (LPSTR)(LPCTSTR)result;

CString緩沖區的字元串采用的是UNICODE的占16位的字元,而string中的是占8位的ANSI标準字元。

有2個方法解決:

1、使用轉換函數

char *chr=new char[wo.GetLength()]

WideCharToMultiByte(CP_ACP,0,wo.GetBuffer(),-1,chr,wo.GetLength(),NULL,NULL);

string str=chr;

2、推薦你使用string的寬字元版本wstring,它的成員函數和string幾乎一模一樣,你肯定會使用

wstring str=wo.GetLength();

【CString轉char*】

http://blog.sina.com.cn/s/blog_58e19ae7010003jt.html

CString m_Head;

char *codefile;

codefile=(LPSTR)(LPCTSTR)m_Head;

2.2string轉CString char*

【string轉CString】

CString cs(str.c_str());

【string轉char*】

方法1:

string str = "hello";

const char* cp= str.data();//char* cp = (char*)str.data();

方法2:

string str = "hello";

const char* cp= str.c_str();//char* cp = (char*)str.c_str();

ps:

2.3 char*轉CString string

【char*轉CString】

曲線轉換:char*-> string -> CString

       char* ch = "hello";

       string str = ch;

       CString cstr(str.c_str());

【char*轉string】

char* cp = "hello";

string s = cp;

參考:

http://blog.sina.com.cn/s/blog_9017526301010r1i.html

http://www.cnblogs.com/bluestorm/p/3168720.html

http://dewei.iteye.com/blog/1566435

http://www.cnblogs.com/ziwuge/archive/2011/06/19/2084608.html