(一) 概述
string和CString均是字符串模板类,string为标准模板类(STL)定义的字符串类,已经纳入C++标准之中;
CString(typedef CStringT<TCHAR, StrTraitMFC<TCHAR>> CString)为Visual C++中最常用的字符串类,继承自CSimpleStringT类,主要应用在MFC和ATL编程中,主要数据类型有char(应用于ANSI),wchar_t(unicode),TCHAR(ANSI与unicode均可);
char*为C编程中最常用的字符串指针,一般以’\0’为结束标志;
(二) 构造
string是方便的,可以从几乎所有的字符串构造而来,包括CString和char*;
CString次之,可以从基本的一些字符串变量构造而来,包括char*等;
char*没有构造函数,仅可以赋值;
举例:
char* psz = “joise”;
CString cstr( psz );
string str( cstr );
(三) 运算符重载
a) operator=
string是最方便的,几乎可以直接用所有的字符串赋值,包括CString和char*;
CString次之,可以直接用些基本的字符串赋值,包括char*等;
char*只能由指针赋值,并且是极危险的操作,建议使用strcpy或者memcpy,而且char*在声明的时候如未赋初值建议先设为NULL
2、char * 转 CString
3、char * 转 string
4、string 转 char *
5、CString 转 string
6、CString 转 char *
7、CString 转 char[100]
无法从“const char *”转换为“char *”
bool filename_sort(const FileNode &fn1, const FileNode &fn2)
{
char *fname1 = strrchr(fn1.filename, '\\');
char *fname2 = strrchr(fn2.filename, '\\');
return (strcmp(fname1, fname2) < 0);
}
char *fname1 = strrchr(const_cast<char*>(fn1.filename), '\\');
char *fname2 = strrchr(const_cast<char*>(fn2.filename), '\\');
使用const_cast转换一下就好了。