CString、string、char []、char *
说明:这个也是我百度总结的一点点。如果有错误希望大家评论区指出来,以便及时修改,以免误导他人。谢谢
CString:
CString对象可以被认为是字符数组.。将CString看作实际的字符串,而不是指向字符串的指针。CString位于头文件afx.h中,一般用于MFC工程。包含了C风格字符串(NULL即'\0'结尾字符串)相关的一些类型和函数的声明,例如strcmp()、strchr()、strstr()等。CString是MFC中定义的字符串类,MFC中很多类及函数都是以CString为参数的,另外CString类重载了(LPCSTR)运算符,所以如果你在MFC下面使用CString类,就可以直接用CString类做为参数来调用需要一个C语言风格字符串的win api函数,编译器会自动调用(LPCSTR)成员函数完成从CString到一个C风格字符串的转换。如果你在MFC下使用C++语言中标准的 string类,那么在调用需要C语言风格的字符串为参数的win api时,你必须显示调用sting.c_str()成员函数,来完成同样的转换。
string:
string可以被看成是以字符为元素的一种容器。string位于C++标准库头文件,string是c++语言中string类模板的申明。字符构成序列(字符串)。有时候在字符序列中进行遍历,标准的string类提供了STL容器接口。具有一些成员函数比如begin()、end(),迭代器可以根据他们进行定位。string不一定以NULL(‘\0’)结束。string长度可以根据length()得到,string可以根据下标访问。不能将string直接赋值给char *。
char []:
char []直接是字符串的地址,直接访问。char s[10]=“Hello world!”的内容是可以改的。因为s[]是在运行时刻赋值的,他只是个存储的工具,编译器编译时并不知道它里面是什么。char []可以根据下标访问。长度可以用strlen()函数计算而得。以NULL(‘\0’)结束。
char *:
char *是一个指针,可以指向一个字符串数组,至于这个数组可以在栈上分配,也可以在堆上分配。内存管理由用户自己处理,很容易出现内存不足的问题。char *s=“Hello world!”的内容是不可以改的。因为s是在编译时刻就确定的。编译器在编译时就已经知道s指向的是常量
CString与string相互转换
CString转string
CString strMfc = "test";
std::string strStr;
strStr = strMfc.GetBuffer(0);
string转CString
CString strMfc;
string strStr = "test";
strMfc = strStr.c_str();
CString与char型数组相互转换
CString转char []
char str[100];
LPSTR p;
CString cstr="hello";
p=cstr.getbuffer();
strcpy(str,p);
char []转CString
char str[]="hello";
CString cstr;
cstr.Format(str);
string与char型数组相互转换
string转char []
char buf[10];
string str("ABCDEFG");
strcpy(buf, str.c_str());//strncpy(buf, str.c_str(), 10);
char [] 转string
char ch [] = "ABCDEFG";
string str;
str = ch;
string与char *相互转换
string转char *
string s = "hello";
char *p;
p = s.c_str();
char *转string
string s;
char *p = "hello";//直接赋值
s = p;