天天看点

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