(一)首先说说string和char*:
1、概述
在C语言中:
1 | string是字符串,而 char *是字符指针。二者不是在什么时候都等价,当字符指针指向的地址保存了一个字符串(即以‘\ 0 ’结尾的一个字符序列)时,可以说它指向了一个字符串,其它情况下则不等价。 |
在C++中: string是一个字符容器,它是模板库里的一个扩展模板类,而char是一个基本数据类型(C++的内置类型),二者就更不等价了。其中string有构造函数,char没有构造函数,只可以赋值(char* m=“abc”; string str(m);)
2、二者的相互转化:
string转char*:
1 | 使用c_str()方法。`std::string str= "abc" ; char * p=str.c_str();` |
char*转string:
1 | 直接使用初始化string s( char *),在不是初始化的地方,最好使用assign(); |
(二)CString
1、概述
CString 是一种很有用的数据类型。它们很大程度上简化了MFC中的许多操作,使得MFC在做字符串操作的时候方便了很多。能体现出 CString 类型方便性特点的一个方面就是字符串的连接,使用 CString 类型,你能很方便地连接两个字符串,正如下面的例子:
3 | CString graycat = gray + cat; |
要比用下面的方法好得多:
3 | char * graycat = malloc(strlen(gray) + strlen(cat) + 1 ); |
2、CString和其它两者之间的转化
CString->std::string 例子:
3 | strStl=strMfc.GetBuffer( 0 ); |
unicode情形下:
1 | CStringW strw = _T( "test" ); |
2 | CStringA stra(strw.GetBuffer( 0 )); |
5 | std::string imgpath=stra.GetBuffer( 0 ); |
std::string->CString 例子:
2 | std::string strStl=“test“; |
CString->char* 例子:
强制类型转换LPCTSTR
或者
使用Getbuffer():
不给 GetBuffer 传递参数时它使用默认值 0,意思是:“给我这个字符串的指针,我保证不加长它”。当调用 ReleaseBuffer 时,字符串的实际长度会被重新计算,然后存入 CString 对象中。
必须强调一点,在 GetBuffer 和 ReleaseBuffer 之间这个范围,一定不能使用你要操作的这个缓冲的 CString 对象.因为 ReleaseBuffer 被调用之前,该 CString 对象的完整性得不到保障。
1 | LPTSTR p = s.GetBuffer(); |