c++中cstring和string的区别,什么是c风格字符串
字符串,顾名思义,就是由字符组成的字符串。string的这个功能在standard C、standard C和MFC中的实现是不一样的,C完全兼容C。
1.标准c语言中的字符串。
标准C中没有string这种数据类型,C中的string是通过char类型字符数组或者char类型字符指针实现的。例如:
char name[26]=这是一个C风格的字符串;或者
char *name=这是一个C风格的字符串;
类型的字符串以\0作为结束标记,占用的内存为实际子字符长度1。它的初始化和赋值都得一个一个的赋值,修改也没什么区别。粒度太小,不直观。就是程序员把软件的一些高层问题,比如算法,抽象数据类型或者软件架构,分散出来。Char *没有构造函数,只能用指针赋值,是一个极其危险的操作。如果在声明char *的时候没有赋一个初始值,建议先初始化为NULL,避免浮动指针或者指针指向未知地址。否则,犯了错误会让你感觉很好!
C标准中没有string类型,但是C中有一个string.h头文件,需要注意的是,这个string.h中的string和string.h头文件中的string是不同的,它定义了一些我们经常用来操作字符串的函数,比如复制函数strcpy,连接字符串strcat,比较字符串strcmp。这些函数的操作对象是指向char *的字符串。
2.标准C中的字符串类
支持c风格的字符串,引入了字符串类的概念。String是由标准模板类STL定义的字符串,几乎可以由所有字符串构造。
string类的文件是string,必须和使用命名空间std一样;一起用。头文件字符串与头文件字符串无关. h前者是标准C中的模板库类,后者是标准C中的头文件,包含常见的C字符串处理函数,如strcmp。前者不是后者的升级版。
要深刻理解string是标准C中的一个类,在标准C中定义如下:char * pt=NULL这无疑是正确的,但是string * pt=NULL在标准C中定义;这种方式不会出现警告和错误,但是运行时会出现异常。这是因为string作为一个类,在定义类的对象时,必须调用它的构造函数。在上面的例子中,指针被赋值为NULL而没有调用它的构造函数,所以很明显会出错。正确的方法是new运算符。C中的new与C中的malloc不同,new不仅分配一块内存,还调用类的构造函数。string *pt=new(这是一个c风格的字符串);或者没有指针字符串;系统自动调用默认构造函数构造一个string类的对象。
3.MFC中的CString类。
MFC中的String类是CString,封装了string,增加了一些接口。在功能上完全兼容string类,而一些标准C/C不能直接操作CString类。CString类是Microsoft visual c提供的MFC中的一个类,因此它只能由支持MFC的项目使用。比如linux上的项目不能使用Cstring,只能使用标准C中的string类,另外因为String类在C标准库中,所以封装在std命名空间中。在使用它之前,需要使用命名空间std声明;CString类不在std命名空间中,因为它不是C的标准库,而是微软的包库。貌似用string类的程序更有移植性。Cstring和string提供的接口方法不同,char*的转换也不同。以下转换内容来自csdnblog:3358blog.csdn.net/bitxinhai/article/details/2292014
4.1 cstring和string之间的转换
stringstr= ksarea
CStringcstr(str . c _ str());//或者CString CSTR(str . data());仅在初始化时。
CSTR=str . c _ str();或者CSTR=str . data();
str=cstr。get buffer(0);//CString - string
cstr.format(%s ,str . c _ str());//string- CString
cstr.format(%s ,str . data());//string- CString
str=LPCSTR(CSTR);//CString- string
c _ str()和data()的区别在于,前者返回一个带/0 的字符串,而后者返回一个不带/0 */的字符串
4.2.CString和int inti=123的转换;
CStringstr
str.format(%d ,I);//int- CString其他基本类型转换类似。
I=atoi(str);//CString- int以及(atof,atol)4.3.char*和CString cstr= ksarea 的转换;
char * ptemp=CSTR . get buffer(0);
char * str
strcpy(str,ptemp);//CString- char*
CSTR . release buffer(-1);
char * str= lovesha
CStringcstr=str//char *-cs string字符串类型不能直接赋给cs string。至于int和float,string和char*之间的转换,可以使用强制转换或者标准库函数。有许多方法可以将CString转换为其他类型,但实际上,它们都达到了相同的目标。在一个方向上,首先将类型转换为char*,因为char*是不同类型之间的桥梁。获取char*类型并将其转换为其他类型非常容易。本文:3358hi.baidu.com/sage _ haokun/blog/item/a 44 b 9733 aa 14d 812 ebc 4 afbc . html,还不错。主要讲Cstring和string的区别。有兴趣的可以看看。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。