c++中c_str()的用法详解

2023-11-08

转载地址:http://blog.csdn.net/u013682388/article/details/39547773

[cpp]  view plain  copy   在CODE上查看代码片 派生到我的代码片
  1. //标准库的string类提供了三个成员函数来从一个string得到c类型的字符数组  
  2. //主要介绍c_str  
  3. //c_str():生成一个const char*指针,指向以空字符终止的数组。  
  4. //这个数组应该是string类内部的数组  
  5. #include <iostream>  
  6. //需要包含cstring的字符串  
  7. #include <cstring>  
  8. using namespace std;  
  9.   
  10. int main()  
  11. {  
  12.     //string-->char*  
  13.     //c_str()函数返回一个指向正规C字符串的指针, 内容与本string串相同  
  14.   
  15.     //这个数组的数据是临时的,当有一个改变这些数据的成员函数被调用后,其中的数据就会失效。  
  16.     //因此要么现用先转换,要么把它的数据复制到用户自己可以管理的内存中  
  17.     const char *c;  
  18.     string s = "1234";  
  19.     c = s.c_str();  
  20.     cout<<c<<endl;  
  21.     s = "abcde";  
  22.     cout<<c<<endl;  
  23. }  

结果是:


上面如果继续用c指针的话,导致的错误将是不可想象的。就如:1234变为abcd

其实上面的c = s.c_str(); 不是一个好习惯。既然c指针指向的内容容易失效,我们就应该按照上面的方法,那怎么把数据复制出来呢?这就要用到strcpy等函数(推荐)。


//更好的处理为:

[cpp]  view plain  copy   在CODE上查看代码片 派生到我的代码片
  1. //标准库的string类提供了三个成员函数来从一个string得到c类型的字符数组  
  2. //主要介绍c_str  
  3. //c_str():生成一个const char*指针,指向以空字符终止的数组。  
  4. //这个数组应该是string类内部的数组  
  5. #include <iostream>  
  6. //需要包含cstring的字符串  
  7. #include <cstring>  
  8. using namespace std;  
  9.   
  10. int main()  
  11. {  
  12.     //更好的方法是将string数组中的内容复制出来 所以会用到strcpy()这个函数  
  13.     char *c = new char[20];  
  14.     string s = "1234";  
  15.     // c_str()返回一个客户程序可读不可改的指向字符数组的指针,不需要手动释放或删除这个指针。  
  16.     strcpy(c,s.c_str());  
  17.     cout<<c<<endl;  
  18.     s = "abcd";  
  19.     cout<<c<<endl;  
  20. }  

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

c++中c_str()的用法详解 的相关文章

  • C/C++语言实现WiFi(socket)数据收发(客户端和服务端)

    目录 客户端 client 服务端 server C C 实现TCP通信 接收WIFI数据 编程环境 VC 6 0 手机端 使用WiFi调试助手 提示 整个过程在局域网中进行 很多编程语言都可以实现socket通信 本博客将通过C C 实现
  • 侯捷系列:c++面向对象高级编程(上)

    文章目录 基于对象的程序设计 不带有指针成员变量的类 以复数类 Complex 为例 头文件的结构 访问级别 函数设计 内联函数 构造函数 常量成员函数 参数的值传递和引用传递 返回值的值传递和引用传递 友元 操作符重载 在类内声明 pub
  • 范围for语句

    C 新标准提供的范围for语句 这种语句遍历给定序列中个元素并对序列中每一个值执行某种操作 其语法形式是 for declaration expression statement 其中 expression 部分是一个对象 用于表示一个序列
  • 互联网创业盈利模式指南

    看了很多创业的case 都有点下笔千言 离题万里的 情况 就是很多case都很精彩 但是公司 的价值最终是落实到 给创业者和投资人的回报的 因此 所有的case 最终都是 落实到盈利 模式上 一位投资人士说的很明确 中国的盈利模式很简单 就
  • C/C++ 引用作为函数的返回值

    语法 类型 函数名 形参列表 函数体 特别注意 1 引用作为函数的返回值时 必须在定义函数时在函数名前将 2 用引用作函数的返回值的最大的好处是在内存中不产生返回值的副本 代码来源 RUNOOB include
  • Lua和C++交互总结(很详细)

    出处 http blog csdn net shun fzll article details 39120965 一 lua堆栈 要理解lua和c 交互 首先要理解lua堆栈 简单来说 Lua和C c 语言通信的主要方法是一个无处不在的虚拟
  • BP学习算法-构建三层神经网络

    引 人工神经网络 Artificial Neural Networks 简写为ANNs 也简称为神经网络 NNs 或称作连接模型 Connection Model 是一种模仿动物神经网络行为特征 进行分布式并行信息处理的算法数学模型 这种网
  • c语言判断一个数是否为偶数

    include
  • R----dplyr包介绍学习

    dplyr包 plyr包的替代者 专门面对数据框 将ddplyr转变为更易用的接口 gt 来自dplyr包的管道函数 其作用是将前一步的结果直接传参给下一步的函数 从而省略了中间的赋值步骤 可以大量减少内存中的对象 节省内存 可惜的是应用范
  • C++:指向类的成员的指针

    引 想必接触过C的朋友们对C语言中指针的概念已经有了深入的了解 如果初步进行了解的朋友可以看一下 C语言基础学习笔记 指针展开来讲的基本知识点包括 指针的概念 指针的定义和初始化及简单使用 指针函数和函数指针 有关指针函数和函数指针的内容上
  • 在聚会中常玩数七的游戏,七的倍数和带有七的数字都不能说,比如14,27,28。请找出1~100的不能说的数字。...

    利用ES5的filter高阶函数来实现 var arr 1 2 3 4 5 6 7 17 27 21 22 28 100 r arr filter function x return x 10 7 x 7 0 alert r 7 14 17
  • 【C/C++】 - Linux下查找函数头文件 以及 man命令拓展

    背景 比如现在需要找C语言 sleep函数的头文件 使用man来查找 可以先man sleep 可以发现出来的默认是sleep 1 是一个User Commands 明显不是我们需要的 这里提示了 看sleep 3 那我们查看下sleep
  • 一个简单的参数帮助框架,c实现

    文章目录 具体实现如下 include
  • enable_shared_from_this使用介绍

    文章目录 enable shared from this定义 使用场合 源码实现 注意 enable shared from this定义 定义于头文件 template lt class T gt class enable shared
  • C/C++编程:令人印象深刻的高级技巧案例

    C C 编程语言在软件开发领域有着悠久的历史 由于其高效 灵活和底层访问能力 至今仍然被广泛应用 本文将介绍一些在C C 编程中令人印象深刻的高级技巧 帮助读者提升编程水平 更加高效地使用这两种强大的编程语言 一 指针运算与内存管理 C C
  • C++ 字符串比较------strcmp函数和strncmp函数

    strcmp 函数原型 int strcmp const char str1 const char str2 功能 strcmp函数会按照字典顺序逐个比较两个字符串的字符 直到遇到不同的字符或者遇到字符串结束符 0 返回值 该函数返回值如下
  • C 语言运算符详解

    C 语言中的运算符 运算符用于对变量和值进行操作 在下面的示例中 我们使用 运算符将两个值相加 int myNum 100 50 虽然 运算符通常用于将两个值相加 就像上面的示例一样 它还可以用于将变量和值相加 或者将变量和另一个变量相加
  • C++ 字符串比较------strcmp函数和strncmp函数

    strcmp 函数原型 int strcmp const char str1 const char str2 功能 strcmp函数会按照字典顺序逐个比较两个字符串的字符 直到遇到不同的字符或者遇到字符串结束符 0 返回值 该函数返回值如下
  • 在 OS X 上的 virtualenv 中安装 scrapy 加密时发生错误 [关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 我正在安装 scrapypip in virtualenv on OS X 10 11 当它安装密码学时 它说 buil
  • C中的内存使用问题

    请帮忙 操作系统 Linux 其中 sleep 1000 中 此时 top 显示Linux任务 给我写了7 7 MEM使用 valgrind 未发现内存泄漏 我明白 写得正确 所有 malloc 结果都是 NULL 但是为什么这次 睡眠 我

随机推荐

  • C++基础知识 - 纯虚函数与抽象类

    什么时候使用纯虚函数 某些类 在现实角度和项目实现角度 都不需要实例化 不需要创建它的对象 这个类中定义的某些成员函数 只是为了提供一个形式上的接口 准备让子类来做具体的实现 此时 这个方法 就可以定义为 纯虚函数 包含纯虚函数的类 就称为
  • ScheduledThreadPoolExecutor 及 ThreadPoolExecutor的基本使用及说明

    关于作者 CSDN内容合伙人 技术专家 从零开始做日活千万级APP 专注于分享各领域原创系列文章 擅长java后端 移动开发 人工智能等 希望大家多多支持 目录 一 导读 二 概览 2 1 为什么不推荐使用Executors去创建线程池 三
  • js创建文件发向服务器,Node.js创建HTTP文件服务器的使用示例

    HelloWorld示例只有演示意义 这次我们来搞一个实际的例子 文件服务器 我们使用Node js创建一个HTTP协议的文件服务器 你可以使用浏览器或其它下载工具到文件服务器上下载文件 为了读取文件 我们会用到File System模块
  • 素数p阶群乘法循环群啥意思_如何证明素数阶群都是abel群?

    这个证明需要分两步 1 首先证明素数阶群都是循环群 2 其次证明循环群一定是abel群 我先来证明1 过程如下 首先我们假设p为任意素数 存在一个群G 群G的阶数是 G p 根据拉格朗日定理我们知道 G的所有元素的阶都可以被p整除 这里的关
  • openGauss5.0企业版CentOS一主两从安装

    目录 一 前期规划 二 依赖包安装 三 环境配置 四 安装前准备 五 预安装 六 安装 一 前期规划 主机名 IP CPU 内存 操作系统 python 节点 node4 192 168 5 7 2核 4G CentOS 7 9 3 6 8
  • yolo格式、voc格式、coco格式相互转换(xml,json,txt)

    yolo转voc keras版yolov3训练格式是name box class这种形式 转voc格式使用一下代码 根据别人的代码改了一点 list txt为yolo的标签 转换的voc格式的标签为 xml文件 都存放在Annotation
  • 计算机程序的构造和解释习题3.28

    计算机程序的构造和解释习题3 28 问题 请将或门定义为一个基本功能块 令构造函数为or gate 程序 define or gate in1 in2 out define or action procedure let new value
  • CH4-程序活动单元Activity

    文章目录 目标 一 Activity的生命周期 目标 1 1 生命周期状态 1 2 生命周期方法 二 Activity的创建 配置 启动和关闭 目标 2 1 创建Activity 2 2 配置Activity 2 3 启动和关闭Activi
  • 点击按钮复制想要复制的文字, 三行代码搞定。。 想粘贴到哪里就粘贴到哪里。。...

    UIPasteboard pab UIPasteboard generalPasteboard NSString string 这个方法走完之后有文本框的时候长按就可以粘贴啦 pab setString string 转载于 https w
  • 【数据结构】【王道】【线性表】单链表的实现及基本操作(带头结点)(可直接运行)

    总目录 文章目录 1 基本操作 1 1 结构体定义 1 2 初始化 1 3 判空 1 4 按位序插入 1 5 指定结点后插操作 1 6 指定结点前插操作 1 7 按位序删除 1 8 按位查找 1 9 按值查找 1 10 表的长度 1 11
  • 西门子et200 分布式i/o_西门子S7-1500H冗余系统硬件及网络结构

    1 1 软件及硬件要求 SIMATIC S7 1500 R H冗余PLC的冗余功能集成在冗余PLC操作系统中 不需要安装额外的冗余包 软件要求为STEP7 Professional V15 1 S7 1500H只有一个CPU型号 CPU15
  • 老码农教你学英语

    说说码农应该如何学习英语 达到熟练掌握英语的水平 首先 我要明确一个概念 英语学习是不可能速成的 一心想速成的同学们可以不用往下看了 不然浪费了你们的时间我可担不起责任啊 作为码农的习惯 自然第一个重点是要准确定义 熟练掌握英语 的概念 我
  • redis未授权漏洞详细利用

    redis未授权漏洞详细利用 攻击机 kali 192 168 52 130 靶机 Ubuntu 192 168 52 134 1 启动redis服务 2 未授权访问漏洞测试 3 利用redis写webshell 前提 1 靶机redis链
  • 通过简单的实验深入透析子网掩码,网关与ARP协议的作用

    http www knowsky com 383893 html 子网掩码 网关与ARP协议的概念和工作原理是学习网络知识的初学者首先碰到的几个重要的知识点 其中子网掩码与ARP协议的作用和基本工作原理更是思科网络技术学院教程Semeste
  • C++项目:Json_parser

    我的json parser generator 我的json parsergenerator 我的json parsergenerator 功能简介 1 解析器部分 2 生成器部分 3 测试部分 部分实现 1整体框架 1json value
  • SpringBoot中静态资源不能访问

    解决SpringBoot中静态资源不能访问的问题 在编写SpringBoot项目上的html页面时 直接调试html页面时 页面可以正常显示 但是在启动项目后 html页面样式丢失 因此想到了 可能是讲台资源被过滤掉了 参考一些大神的博客
  • HTML表单

  • AcWing 422. 校门外的树

    题目 某校大门外长度为L的马路上有一排树 每两棵相邻的树之间的间隔都是1米 我们可以把马路看成一个数轴 马路的一端在数轴0的位置 另一端在L的位置 数轴上的每个整数点 即0 1 2 L 都种有一棵树 由于马路上有一些区域要用来建地铁 这些区
  • 【vscode运行nodemon报错解决方法】

    看这篇文章的都是使用 vscode 的开发者吧 都遇到 nodemon app js 这种命令报错吧 话不多说 我来帮你解决这个问题 nodemon app js 1 如果你运行 nodemon 命令报的错是这个的话 那么恭喜你 看对文章了
  • c++中c_str()的用法详解

    转载地址 http blog csdn net u013682388 article details 39547773 cpp view plain copy 标准库的string类提供了三个成员函数来从一个string得到c类型的字符数组