STring与CSTring的区别和联系

CString:MFC里面封装的类。主要应用在MFC和ATL程中

主要数据类型有char(应用于ANSI),wchar_t(unicode),TCHAR(ANSI与unicode均可);

动态的TCHAR数组。它是一个完全独立的类,封装了+等操作符和字符串操作方法。

String:标准模板类(STL)定义的字符串类, 类似于Vector

string.h是C语言中字符串操作函数的头文件

cstring.h是c++对C语言中的strcpy之类的函数声明,包含cstring.h之后,就可以在程序中使用C语言风格的strcpy之类的函数。

转换:

CString→String

String→CString

 

构造

string可以从几乎所有的字符串构造而来,包括CString和char*;

CString次之,可以从基本的一些字符串变量构造而来,包括char*等;

char*没有构造函数,仅可以赋值;

eg:

 

赋值

1、=

string 几乎可以直接用所有的字符串赋值,包括CString和char*;

CString 次之,可以直接用些基本的字符串赋值,包括char*等;

char* 只能由指针赋值,并且是极危险的操作,建议使用strcpy或者memcpy,而且char*在声明的时候如未赋初值建议先设为NULL,以避免野指针;

eg:

 

对于字符数组与CString的转换,我们需要注意

行之有效的办法

2、+

string与CString差不多,可以直接与char*进行加法,但不可以相互使用+运算符,即string str = str + cstr是非法的,须转换成char*;

char*没有+运算,只能使用strcat把两个指针连在一起;

eg:

 

3、+=

string 几乎可以与所有的字符串变量+=,包括CString和char*;

CString 次之,可以与基本的一些字符串变量进行+=而来,包括char*等;

char*没有+=运算符,只能使用strcat把两个指针连在一起;

4、[]

CString最好,当越界时会抛出断言异常;

string与char*下标越界结果未定义;

eg: