2012mfc,几种串

server/2025/1/11 12:21:32/

,即是由符组成的,在标准C,标准C++,MFC这一功能的实现不相同的,C++完全兼容了C.

1.标准C中的

标准C中没有数据类型,C中的是有类型的符数组类型的符指针来实现的.如:

 char   name[26]="This is a Cstyle string";
//或char  *name="This is a Cstyle string";

类型的\0结束标记,所占内存实际子符长度+1,要逐个字符的赋值初化与赋值,不知道是否修改,粒度太小,很不直观.

char*没有构造器,仅能由指针赋值,而且是个极其危险的操作,在声明char*时如果没有赋初值,建议,先按无效初化,以免出现悬浮指针地址不明的指针,否则,出错会让你很悲惨!

标准C中是没有类型,但是在C中有string.h头文件,注意,如下string.h中的非彼,<string.h>头文件中定义一些经常用到的操作的函数,如复制strcpy函数,连接strcat,比较strcmp,这些函数的操作对象都是指向char*.

2.标准C++中的

C++支持C风格的使用,而且引入了类的概念,为标准模板类STL定义的,几乎可从所有的构造出来.

类的头文件<string>,且要和usingnamespacestd;一起使用.<string>头文件和<string.h>头文件没有关系,前者是标准C++中的模板库类,后者是标准C中的包含常用C处理函数头文件,如strcmp,前者并非是后者的升级版.

深刻理解标准C++一个类,如在标准C中定义如下:char*pt=NULL;无疑是正确的,但是在标准C++中定义string*pt=NULL;

这样做编译器不会有警告和错误,但是运行时就会有异常.这是因为一个类,定义类的对象时要调用其构造器,上例既没有调用其构造器,还把指针赋值为无效,很明显会出错.

正确的方法是用符号,C++中的不同于C中的malloc,new不但会分配一块内存,还调用类的构造器.string*pt=new("thisisac++stylestring");
不用指针string str;,系统自动调用默认的构造器,构造一个类的对象.

3.MFC中的CString类.

MFC中的CString,封装了的东西,并增加了一些接口,在功能上完全兼容类,而一些标准的C/C++不能直接对CString类操作,CString类是微软VC++提供的MFC里面的一个类,所以只有支持MFC的工程才可用.

如在linux上的工程就不能用CString了,只能用标准C++中的类了.另外,因为类是在c++标准库中,所以在std名字空间中封装它,用前要声明using namespace std;

CString类,并不在std名字空间中,因为它不是c++的标准库,只是微软的一个封装库.这点看来用类的程序的移植性更好.
CString提供的接口方法不同,对char*的转换也不同.

4.1CString的转换

string str="ksarea";
CString cstr(str.c_str());//或`CString cstr(str.data());`初化时才行
cstr=str.c_str();或cstr=str.data();
str=cstr.GetBuffer(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 i=123;

CString str;
str.format("%d",i);
//`int->CString`其他的基本类型转换类似
i=atoi(str);
//`CString->int`还有`(atof,atol)4.3.char*`和`CString`的转换`CStringcstr="ksarea";`
char* ptemp=cstr.getbuffer(0);
char* str;
strcpy(str,ptemp);//`CString->char*`
cstr.releasebuffer(-1);
char*str="lovesha";
CString cstr=str;

char*->CString,类型不能直接赋值CString至于float,stringchar*间的转换可用强制转换,或标准库函数.
CString其他类型转换,方法有很多,但其实都殊途同归,首先转换类型为char*类型,因为char*不同类型间的桥梁.得到char*类型,再按其他类型转换就非常容易了.


http://www.ppmy.cn/server/157462.html

相关文章

Web3 社交革命:告别中心化,拥抱多元连接

随着互联网的发展&#xff0c;我们已经习惯了通过中心化平台与他人互动&#xff0c;无论是社交媒体、即时通讯还是在线社区&#xff0c;所有这些平台都由少数大公司控制。Web3的出现&#xff0c;意味着一种新的社交模式正在悄然崛起——去中心化社交网络&#xff08;Decentrali…

页面滚动下拉时,元素变为fixed浮动,上拉到顶部时恢复原状,js代码以视频示例

页面滚动下拉时,元素变为fixed浮动js代码 以视频示例 <style>video{width:100%;height:auto}.div2,#float1{position:fixed;_position:absolute;top:45px;right:0; z-index:250;}button{float:right;display:block;margin:5px} </style><section id"abou…

Unity使用Vuforia插件进行AR开发

零、最终效果 Unity使用Vuforia插件进行AR开发 一、资源准备 1、在Unity中添加Vuforia插件 &#xff08;1&#xff09;在UnityAssetStore中搜索Vuforia插件并添加到自己的资源中 网页地址&#xff1a;https://assetstore.unity.com/packages/templates/packs/vuforia-engine…

项目中如何选择垃圾回收器

选择合适的垃圾回收器对Java应用程序的性能和可扩展性至关重要。不同的垃圾回收器适用于不同类型的应用场景。以下是一些常见的垃圾回收器及其适用场景&#xff1a; 1. 串行收集器&#xff08;Serial Collector&#xff09; 特点&#xff1a;使用单线程进行垃圾回收&#xff…

计算机网络之---局域网

什么叫局域网 局域网&#xff08;LAN&#xff0c;Local Area Network&#xff09; 是指在一个相对较小的区域内&#xff0c;如家庭、办公室、学校、企业等&#xff0c;连接多个计算机和设备的网络。局域网的特点是覆盖范围小、传输速度快、构建成本较低。 局域网的主要特点&…

数据结构——栈的实现

今天&#xff0c;我们来写一下关于栈的博文。 1.首先我们先了解一下什么是栈&#xff1f; 一&#xff1a;概念&#xff1a; 栈&#xff1a;一种特殊的线性表&#xff0c;其只允许在固定的一端进行插入和删除元素操作。 进行数据插入和删除操作的一端称为栈顶&#xff0c;另…

英雄联盟丢失dll文件怎么解决?游戏中发现dll找不到的处理方法

下班或放学回到家&#xff0c;美滋滋地打开电脑&#xff0c;准备在召唤师峡谷大杀四方&#xff0c;结果点击启动游戏的瞬间&#xff0c;一个弹窗如同 “恶魔” 般出现 ——“XX.dll 文件丢失&#xff0c;无法启动游戏”。那一刻&#xff0c;是不是感觉心都凉了半截&#xff1f;…

英语互助小程序springboot+论文源码调试讲解

第2章 开发环境与技术 英语互助小程序的编码实现需要搭建一定的环境和使用相应的技术&#xff0c;接下来的内容就是对英语互助小程序用到的技术和工具进行介绍。 2.1 MYSQL数据库 本课题所开发的应用程序在数据操作方面是不可预知的&#xff0c;是经常变动的&#xff0c;没有…