博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于C/C++中const char*、char*、string之间那点事
阅读量:4093 次
发布时间:2019-05-25

本文共 1134 字,大约阅读时间需要 3 分钟。

​相信很多刚开始学习C/C++的小伙伴经常会遇到const char*、char*、string之间缠绵的转换关系,甚至有些时候有点迷糊,接下来就开始一起梳理一下...

1.const char* 和string 相互转换

//const char*转string,直接赋值const char* pc = "it container";std::string str = pc;//string转const char*,利用c_str()或者data()std::string str = "it container";const char* pc = str.c_str();const char* pc = str.data();

2.char*和const char*相互转换

//const char*转char*,利用const_cast
const char* pc = "it container";char* c = const_cast
(pc);//char*转const char*,直接赋值char* c = (char *)"it container";const char* pc = c;

3. char*和string相互转换

//char*转string,直接赋值char* c = (char *)"it container";std::string str = c;//string转char*, 1. string->const char*,2. const char*->char*std::string str = "it container";char* c = const_cast
(str.c_str());

希望通过以上的小的基础知识点能够让让迷糊变得清晰。

另外,接触过C语言的伙伴儿都应该知道C语言风格的字符串要以'\0'结尾,那么为什么C语言风格的字符串要以'\0'结尾,C++不需要吗?C语言用char*指针作为字符串时,在读取字符串时需要一个特殊字符0来标记指针的结束位置,也就是通常认为的字符串结束标记。而C++语言则是面向对象的,长度信息直接被存储在了对象的成员中,读取字符串可以直接根据这个长度来读取,所以不结束标记。其实std::string:标准中未规定需要\0作为字符串结尾。因编译器不同,在实现时既可以在结尾加\0,也可以不加。但是,当通过c_str()或data()把std::string转换为const char *时,会发现最后一个字符是\0。C++11后,string字符串都是以'\0'结尾。 

 

 

--|END|--

转载地址:http://teiii.baihongyu.com/

你可能感兴趣的文章
zookeeper(2)---shell操作
查看>>
mapReduce(3)---入门示例WordCount
查看>>
hbase(3)---shell操作
查看>>
hbase(1)---概述
查看>>
hbase(5)---API示例
查看>>
SSM-CRUD(1)---环境搭建
查看>>
SSM-CRUD(2)---查询
查看>>
SSM-CRUD (3)---查询功能改造
查看>>
Nginx(2)---安装与启动
查看>>
springBoot(5)---整合servlet、Filter、Listener
查看>>
C++ 模板类型参数
查看>>
C++ 非类型模版参数
查看>>
设计模式 依赖倒转原则 & 里氏代换原则
查看>>
DirectX11 光照
查看>>
图形学 图形渲染管线
查看>>
DirectX11 计时和动画
查看>>
DirectX11 光照与材质的相互作用
查看>>
DirectX11 法线向量
查看>>
DirectX11 兰伯特余弦定理(Lambert)
查看>>
DirectX11 漫反射光
查看>>