混用string对象和C风格字符串

我们都知道允许使用字符串字面值来初始化string对象:

string s("Hello World!");

C++规定,任何出现字符串字面值的地方都可以用以空字符结束的字符数组来替代:

  • 允许使用以空字符结束的字符数组来初始化string对象或为string对象赋值。
  • 在string对象的加法运算中允许使用以空字符结束的字符数组作为其中一个运算带对象(不能两个对象都是);在string对象的复合赋值运算中允许是用以空字符结束的字符数组作为右侧的运算对象

上述性质反过来并不成立:如果程序的某处需要一个C风格字符串,无法直接用string对象来替代它。

例如:不能使用string对象直接初始化指向字符的指针。为了实现这一功能,string专门提供了一个名为c_str的成员函数:

char *str = s; // 错误:不能用string对象初始化char*
const char *str = s.c_str; // 正确

函数返回结果使用一个指针,该指针指向一个以空字符结束的字符数组,而这个数组所存的数据恰好与哪个string对象的一样。结果指针的类型是const char*,从而确保我们不会改变字符数组的内容。

PS:由于我们无法保证c_str函数返回的数组一直有效,如果后续的操作改变了s的值就可能让之前返回的数组失去效用。因此,如果执行完c_str()函数后程序想一直都能使用其返回的数组,最好将该数组重新拷贝一份。

string对象和C风格字符串相关推荐

  1. 《C++ Primer 第五版》(第3.5-3.6节) ——C++中的内置数组类型,string对象和C风格字符串

    1.C++中的内置数组类型 C++中的数组是内置数据类型,但不是基础数据类型而是构造数据类型,是有限个相同数据.占据着连续物理存储空间的有序集合.而内置数据类型定义的下标运算符可以处理负值运算(只要在 ...

  2. 混用string对象与C风格字符串

    任何出现字符串字面值的地方都可以用以空字符结束的字符数组来替代: 允许使用以空字符结束的字符数组来初始化string对象或为string对象赋值. 在string对象的加法运算中允许使用以空字符结束的 ...

  3. java 创建string对象机制 字符串缓冲池 字符串拼接机制

    对于创建String对象的机制,在这一过程中涉及的东西还是值得探究一番的. 首先看通过new String对象和直接赋值的方式有什么区别,看如下代码: public static void main( ...

  4. [Java基础]String对象的特点(易错点)

    String对象的特点: 1.通过new创建的字符串对象,每一次new都会申请一个内存空间,虽然内容相同,但是地址值不同. 2.以""方式给出的字符串,只要字符串相同(顺序和大小写 ...

  5. Js中String对象

    Js中String对象 String全局对象是一个用于字符串或一个字符序列的构造函数. 描述 创建一个字符串可以通过字面量的方式,通过字面量创建的字符串变量在调用方法的时候能够自动转化为临时的包装对象 ...

  6. C风格字符串和C++ string 对象赋值操作的性能比较

    <<C++ Primer>> 第四版 Exercise Section 4.3.1 部分Exercise 4.2.9 习题如下: 在自己本机执行如下程序,记录程序执行时间: 1 ...

  7. c++基本类型c++string与c风格字符串的相互转化

    ********************************************************** c++基本类型: char <= short <= int(float ...

  8. c字符串、string对象、字符串字面值的区别

    一.字符串字面值 字符串字面值是一串常量字符,字符串字面值常量用双引号括起来的零个或多个字符表示,为兼容C语言,C++中所有的字符串字面值都由编译器自动在末尾添加一个空字符. 字符串没有变量名字,自身 ...

  9. C++ 笔记(09)— 字符串(C 风格字符串、C++字符串 string)

    C++ 提供了以下两种类型的字符串表示形式: C 风格字符串: C++ 引入的 string 类类型: 1. C 风格字符串 C 风格的字符串起源于 C 语言,并在 C++ 中继续得到支持.字符串实际 ...

最新文章

  1. 分治法解决最大子数组问题
  2. CTFshow php特性 web147
  3. node更新到最新版本_云顶之弈10.24版本临时更新永恩、劫大砍,最新上分阵容推荐...
  4. 常用正则表达式大全——包括校验数字、字符、一些特殊的需求
  5. Java EE 6与Spring Framework:技术决策过程
  6. ajax 提交 .net ispostback不执行,ASP.NET基于Ajax的Enter键提交问题分析
  7. Linux 离线安装 docker-componse,防止网络出现问题
  8. 分布式光伏贷款欲破冰 多家银行推出相关业务
  9. 在vivado hls软件上打开zynqnet工程,Vivado HLS Command Prompt(Vivado HLS 命令提示符)是什么
  10. git修改本地仓库和远程仓库名称
  11. springcloud gateway介绍
  12. 收费英超与中国球迷相互抛弃
  13. ANSYS预紧力螺栓连接钢结构节点分析实例(前处理基于HyperMesh)
  14. 【2022牛客多校5 A题 Don‘t Starve】DP
  15. Running pipenv gives TypeError: 'module' object is not callable
  16. 蓝桥杯:调和级数————Python
  17. python接入支付宝
  18. W ndows10如何清理使用痕迹,Windows10操作技巧系列——删除最常用,最常访问,快速访问记录...
  19. Python爬虫-爬取常用IP代理
  20. matlab多元函数数值积分,(数值积分)多元函数的某一变量进行定积分,int积分不出...

热门文章

  1. jquery交换数组元素位置_跟我一起学jQuery——第一集
  2. idea中java文件怎么运行_Java入门基础篇-如何在Java中创建只读文件
  3. nginx管理面板_吸塑包装自建网站上线,阿里云ecs+bt面板+WordPress
  4. php左侧菜单栏递归代码,js实现左侧菜单栏递归循环遍历
  5. u-boot向linux内核传递启动参数
  6. 搜索不包含关键词_亚马逊listing关键词优化
  7. 【转】走进windows编程的世界-----对话框、文本框、按钮
  8. Dynamics 365 on-premises 安装
  9. 【转】3.3SharePoint服务器端对象模型 之 访问文件和文件夹(Part 3)
  10. oracle 12c sql图形化,Oracle 12c PL/SQL程序设计终极指南