MFC中CString,C++中string,c风格字符串
来源:互联网 发布:中山淘宝摄影培训班 编辑:程序博客网 时间:2024/05/16 07:26
1. 标准C中的字符串
标准C中没有string这样的数据类型,C中的字符串是有char类型的字符数组或者char类型的字符指针来实现的。例如:
char name[26]="This is a C-style string"; 或者char *name="This is a C-style string";
类型的字符串以’\0’为结束标记,所占内存是实际子符长度+1,其初始化和赋值都要逐个字符的赋值,char* 中没有构造函数,仅能由指针赋值,而且是一个极其危险的操作,在声明char * 的时候如果没有赋初值,建议先初始化为NULL,以免出现悬浮指针或者指向地址不明的指针。
标准C中是没有string类型的,但是在标准C中有”string.h”头文件,需要注意的是此“string.h”中的string 非彼string,“string.h”头文件中定义了一些我们经常用到的操作字符串的函数,如复制函数strcpy,连接字符串strcat,比较字符串strcmp,这些函数的操作对象都是指向char *的字符串。
2. 标准C++中的string类
C++支持C风格字符串的使用,而且引入了string类的概念,string为标准模板类STL定义的字符串,几乎可以从所有的字符串构造出来。string字符串类的都文件是”string”,并且要和using namespace std; 一起使用。头文件”string”和头文件”string.h”没有任何关系,前者是标准C++中的模板库类,后者是标准C中的包含常用C字符串处理函数的头文件,如strcmp,前者并非是后者的升级版。
标准C++中string是一个类, 如在标准C中定义如下:char * pt=NULL; 这无疑是正确的。
但是在标准C++中定义 string *pt=NULL;这样做编译器不会有警告和错误,但是运行是就会有异常。
这是因为string作为一个类,定义类的对象时要调用其构造函数的,上面的例子既没有调用其构造函数,还把指针赋值为NULL,很明显就会出错的。正确的 方法是是new操作符,C++中的new不同于C中的malloc, new不但会分配一块内存,还调用类的构造函数。string *pt=new(“this is a c++-style string”); 或者不用指针,这样定义 string str;系统自动调用默认的构造函数,构造一个string类的对象。
3. MFC中的CString类
MFC中的字符串类是CString,封装了string的东西,并增加了一些接口,在功能上完全兼容string类,而一些标准的C/C++不能直接对CString类进行操作,CString 类是微软的visual c++提供的MFC里面的一个类,所以只有支持MFC的工程才可以使用。如在linux上的工程就不能用CString了,只能用标准C++中的 string类了。另外,因为string类是在c++标准库中,所以它被封装在了std命名空间中,使用之前需要声明using namespace std;而CString类并不在std命名空间中,因为它不是c++的标准库,只是微软的一个封装库。这点看来用string类的程序的移植性更好。
4. CString 和string的转换
//string-> CString string str="ksarea";CString cstr(str.c_str());//或者CString cstr(str.data());初始化时才行cstr=str.c_str();或者cstr=str.data();cstr.format("%s", str.c_str()); //string->CStringcstr.format("%s", str.data()); //string->CString//CString -> stringstr=cstr.GetBuffer(0); //CString -> string/*GetBuffer(0)为一个CString对象重新获取其内部字符缓冲区的指针,返回的LPTSTR为非const的,从而允许直接修改CString中的内容。*/str = LPCSTR(cstr); //CString->string/*c_str()和data()区别是:前者返回带'/0'的字符串,后者则返回不带'/0'的字符串*/
5. CString 和int的转换
int i = 123;CString cstr;cstr.format("%d",i);//int->CString 其他的基本类型转化类似i=atoi(cstr);//CString->int 还有(atof,atol)
6. CString 和char*的转换
CString cstr = "ksarea";char* ptemp=cstr.getbuffer(0);char* str;strcpy(str,ptemp);//CString->char*cstr.releasebuffer(-1);char* str = "lovesha";CString cstr = str;//char*->CString,而string类型不能直接赋值给CString
至于int与float、string与char*之间的转化可以使用强制转化,或者标准库函数进行。
对于CString与其他类型的转化方法很多,但其实都殊途同归,朝着一个方向即将类型首先转化为char*类型,因为char*是不同类型之间的桥梁。得到char*类型,转化为其他类型就非常容易了。
转自
- MFC中CString,C++中string,c风格字符串
- 简析MFC中CString用作C字符串
- C 风格字符串,C++string类,MFC,CString类的区别。
- C 风格字符串,C++string类,MFC,CString类的区别。
- C 风格字符串,C++string类,MFC,CString类的区别。
- 完成一程序演示字符数组、C风格字符串、std::string和MFC中的Cstring类型之间的相互转换
- MFC/C++/C中字符类型CString, int, string, char*之间的转换
- MFC/C++/C中字符类型CString, int, string, char*之间的转换
- MFC/C++/C中字符类型CString, int, string, char*之间的转换
- MFC/C++/C中字符类型CString, int, string, char*之间的转换
- MFC/C++/C中字符类型CString, int, string, char*之间的转换
- MFC/C++/C中字符类型CString, int, string, char*转换
- MFC/C++/C中CString, int, string, char*之间的转换
- MFC/C++/C中字符类型CString, int, string, char*转换(转)
- MFC/C++/C中字符类型CString, int, string, char*之间的转换
- MFC/C++/C中字符类型CString, int, string, char*之间的转换
- MFC/C++/C中字符类型CString, int, string, char*之间的转换
- MFC/C++/C中字符类型CString, int, string, char*之间的转换
- CABasicAnimation animationWithKeyPath 一些规定的值
- Hibernate主副配置文件的简单讲解
- 字符串逆序输出
- js对字符串编码,解码 .net对字符串编码,解码
- 2-5浙大版《数据结构(第2版)》题目集
- MFC中CString,C++中string,c风格字符串
- iOS 地图实现一个大头针在屏幕中心不随地图的拖动而移动
- Leetcode 255 Verify Preorder Sequence in Binary Search Tree
- c++中的变量作用范围
- 在信息时代,亚媒网泛家居行业要如何发展?
- Java多线程中join方法_保证线程执行完后再销毁activity
- java基础教程:数据类型(6)
- 理解java中==、equals()、hashCode()
- Kotlin学习记录(一)——搭建环境到输出Hello World!