2012mfc,几种串

串,即是由符组成的串,在标准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.mzph.cn/pingmian/66441.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

任务调度之Quartz(二):Quartz体系结构

1、Quartz 体系结构 由上一篇的Quartz基本使用可以发现&#xff0c;Quartz 主要包含一下几种角色&#xff1a; 1&#xff09;Job&#xff1a;也可以认为是JobDtetail&#xff0c;表示具体的调度任务 2&#xff09;Trigger&#xff1a;触发器&#xff0c;用于定义任务Job出发执行…

十五、Vue 响应接口

文章目录 一、响应式系统基础什么是响应式系统响应式数据的声明与使用二、响应式原理深入Object.defineProperty () 方法的应用(Vue2)Proxy 对象的应用(Vue3)三、响应式接口之 ref 和 reactive(Vue3)ref 函数的使用reactive 函数的使用四、计算属性(computed)作为响应式…

Nature Electronics——近传感器计算:50 nm异构集成技术的革命

创新点&#xff1a;1.高密度互联设计&#xff1a;基于二维材料&#xff0c;开发出互连密度高达62,500 I/O每平方毫米的M3D集成结构。2.异构层堆叠&#xff1a;整合了第二层石墨烯化学传感器和第一层MoS₂记忆晶体管&#xff0c;实现功能互补。3.超短传感器与计算元件距离&#…

Ubuntu 安装 Java 1.8

如果你希望使用 Oracle JDK 8&#xff0c;可以按照以下步骤操作&#xff1a; 下载 Oracle JDK 8&#xff1a; 访问 Oracle 官方网站 下载适用于 Ubuntu 的 JDK 8 版本 安装 Oracle JDK 8&#xff1a; 将下载的 JDK 8 压缩包解压到一个目录中&#xff0c;例如 /opt/module&…

字节青训入营考核十五题-Java-找单独的数

问题 问题描述 在一个班级中&#xff0c;每位同学都拿到了一张卡片&#xff0c;上面有一个整数。有趣的是&#xff0c;除了一个数字之外&#xff0c;所有的数字都恰好出现了两次。现在需要你帮助班长小C快速找到那个拿了独特数字卡片的同学手上的数字是什么。 要求&#xff…

Unity学习之UGUI(三)

十二、Slider 1、作用 Slider是滑动条组件&#xff0c;是UGUI中用于处理滑动条相关交互的关键组件 创建Slider默认包括4个对象 父对象&#xff1a;Slider组件依附的对象 子对象&#xff1a;背景图&#xff0c;进度图&#xff0c;滑动块三组对象 2、主要参数 3、代码控制 voi…

win下搭建elk并集成springboot

一、ELK 是什么&#xff1f; ELK 实际上是三个工具的集合&#xff0c;Elasticsearch Logstash Kibana&#xff0c;这三个工具组合形成了一套实用、易用的监控架构&#xff0c;很多公司利用它来搭建可视化的海量日志分析平台。 ElasticSearch ElasticSearch 是一个基于 Lucen…

基于微信小程序疫苗预约系统ssm+论文源码调试讲解

第四章 系统设计 到目前为止&#xff0c;市面上已经存在了各种各样的软件系统&#xff0c;从系统的分类着手&#xff0c;主要应用范围倾向于办公系统&#xff0c;娱乐系统&#xff0c;社交系统&#xff0c;然后下面有很多比较细的分支系统。很多系统已经经过了市场的考验&…

MySQL慢查询问题排查

第一步&#xff1a;查看当前正在运行的事务状态 select trx_state,trx_started,trx_mysql_thread_id,trx_query from information_schema.innodb_trx; 其中&#xff1a; Trx_state&#xff1a;事务状态 Trx_started&#xff1a;事务启动时间 Trx_mysql_thread_id&…

c++领域展开第十幕——类和对象(内存管理——c/c++内存分布、c++内存管理方式、new/delete与malloc/free区别)超详细!!!!

文章目录 前言一、c/c内存分布二、c的内存管理方式2.1new/delete操作内置类型2.2new和delete操作自定义类型 三、operator new与operator delete函数3.1operator new与operator delete函数 四、new和delete的实现原理4.1 内置类型4.2 自定义类型 五、malloc/free和new/delete的…

MacBook_Xcode_Swift雨燕

Swift Swift Swift Swift是苹果公司开发的现代化编程语言&#xff0c; 专为Apple平台设计。其简洁语法、类型安全、Optionals处理、Playgrounds交互式环境、泛型编程、协议与扩展、闭包功能、枚举与关联值、结构体与类的高效内存管理、异步编程的async/await语法、Swift Packa…

QT自定义工具条渐变背景颜色一例

使用样式定义&#xff1a; QWidget* toolbar new QWidget(this);toolbar->setObjectName("main_tool");toolbar->setStyleSheet("#main_tool{background: qlineargradient(x1:0 , y1:0 , x2:1 , y2:0,""stop:0 rgba(0,255,0, 0.2),"&q…

Flutter 鸿蒙化 flutter和鸿蒙next混和渲染

前言导读 这一个节课我们讲一下PlatformView的是使用 我们在实战中有可能出现了在鸿蒙next只加载一部分Flutter的情况 我们今天就讲一下这种情况具体实现要使用到我们的PlatformView 效果图 具体实现: 一、Native侧 使用 DevEco Studio工具打开 platform_view_example\oho…

React Native 项目 Error: EMFILE: too many open files, watch

硬件&#xff1a;MacBook Pro (Retina, 13-inch, Mid 2014) OS版本&#xff1a;MacOS BigSur 11.7.10 (20G1427) 更新: 删除modules的方法会有反弹&#xff0c;最后还是手动安装了预编译版本的watchman。 React Native 项目运行npm run web&#xff0c;出现如下错误&#xff1a…

倾斜摄影相机在不动产确权登记和权籍调查中的应用

一、项目背景 1.1 项目背景 为贯彻落实中央、国务院关于实施乡村振兴战略、关于“扎实推进房地一体的农村集体建设用地和宅基地使用权确权登记颁证&#xff0c;完善农民闲置宅基地和闲置农房政策&#xff0c;探索宅基地所有权、资格权、使用权‘三权分置’”的要求&#xff0…

2.1.7-1 io_uring的使用

一、背景 &#xff08;1&#xff09;下面几个有关异步操作的例子&#xff1a; a&#xff09;客户端和服务端的异步关系&#xff0c;就是客户端发送请求后不需要等待结果&#xff0c;接下来发送其他请求。 b&#xff09;对于服务端&#xff0c;客户端来请求后&#xff0c;服务…

Lua开发环境如何安装?保姆级教程

大家好&#xff0c;我是袁庭新。Lua开发环境如何安装搭建&#xff1f;这套篇文章帮你搞定&#xff5e; CentOS 7系统默认已经安装了Lua语言环境&#xff0c;因此可直接运行Lua代码。可以使用以下命令查看当前系统中默认自带的Lua版本。 # 查看系统默认自带的Lua版本 [rootloc…

SpringBoot入门之创建一个Hello World项目

文章目录 一、使用传统的方式1、创建一个SpringBoot项目2、配置pom.xml文件3、下载Maven依赖4、创建一个Controller类&#xff1a;com.devops.controller.HelloController5、创建一个引导类&#xff1a;com.devops.HelloApplication6、启动项目8、访问80809、完整项目结构 二、…

搜索引擎是如何理解你的查询并提供精准结果的?

目录 一、搜索引擎简单介绍 二、搜索引擎整体架构和工作过程 &#xff08;一&#xff09;整体分析 &#xff08;二&#xff09;爬虫系统 三个基本点 爬虫系统的工作流程 关键考虑因素和挑战 &#xff08;三&#xff09;索引系统 网页处理阶段 预处理阶段 反作弊分析…

vulnhub靶场-potato(至获取shell)

arp-scan -l 扫描IP 使用御剑端口扫描扫描端口&#xff0c;扫到了80和7120两个端口&#xff0c;其中7120为ssh端口 使用dirb http://192.168.171.134 扫描目录 发现info.php 访问为phpinfo界面 访问192.168.171.134为一个大土豆&#xff0c;没什么用 所以我们从ssh入手 盲…