char * 和 std::string

发布时间:2026/10/8 23:08:30

char * 和 std::string 1 char * 和 std::string 的区别char * 字符串是常量字符串不能修改std::string 指向的字符串可以修改实例代码如下图所示s1 和 s2 均是常量字符串字符串常量保存在只读数据区是只读的不能写代码中注释的那两行代码会导致段错误。s3 是字符数组字符数组是可以修改的std::string 类型的字符串也是可以修改的。#include stdlib.h #include stdio.h #include iostream #include string #include cstring int main() { char *s1 hello; char *s2 hello; char s3[] hello; std::string s4 hello; printf(s1 addr %p, s2 addr %p, s3 addr %p, s4 addr %p\n, s1, s2, s3, s4.c_str()); printf(sizeof(s1) %d, sizeof(s3) %d, sizeof(s4.c_str()) %d\n, sizeof(s1), sizeof(s3), sizeof(s4.c_str())); // s1[1] a; // s2[1] a; s3[1] a; s4[1] a; std::cout s1 s1 , s2 s2 , s3 s3 , s4 s4 std::endl; return 0; }代码运行之后可以看到 s1 和 s2 是常量字符串这两个指针指向的地址也是相同的。从 s1s2 的地址和 s3s4 的地址对比可以看出s3 和 s4 的地址相距比较近和 s1、s2 的地址相距比较远。s1、s2 和 s3、s4 保存的段都不一样前者保存在只读数据段后者保存在栈所以地址差距才会大。sizeof一个char*类型就是指针的大小在64位系统上是832位系统上是4sizeof s3返回的是一个数组的大小数组的大小就是这个数组所占的空间包含了字符串结尾的\0。strlen是纯字符串的长度不包含字符串结尾的\0。2 std::string 是深度拷贝如下图所示 有 3 个字符串s1、s2 和 s3。s2 是基于 s1 通过拷贝构造而来将 s2[1] 赋值为 a然后打印 s1 和 s2s1 仍为 hellos2 为 hallo说明 s1 和 s2 相互不影响是深拷贝。s3 被 s1 赋值将 s3[1] 赋值为 m然后打印 s1 和 s3s1 仍为 hellos3 为 hmllos1 和 s3 相互没有影响。#include iostream #include string int main() { std::string s1 hello; std::string s2 s1; std::cout 1, s2 s1 std::endl; s2[1] a; std::cout 2, s2 s2 , s1 s1 std::endl; std::string s3 aaa; s3 s1; std::cout 1, s3 s3 std::endl; s3[1] m; std::cout 2, s3 s3 , s1 s1 std::endl; return 0; }运行结果如下3 std::string capacity如下代码声明了一个空字符串 s1打印出来了 s1.capacity是 15也就是说 std::string 默认就会有 15 的空间。通过这样预申请空间的方式避免了小字符串申请内存也是一种用空间换时间的方法。如果字符串的大小不大于 15就不会申请堆空间如下代码可以验证。执行结果使用 gdb 调试对 malloc 设置断点可以查看上边的代码哪一行调用了 malloc()。第 11 行字符串长度是 16大于 15 了需要申请内存。第 12 行拷贝构造深拷贝长度大于 15需要申请内存。第 14 行赋值运算符长度大于 15需要申请内存。第 16 行新创建的 s6长度大于 15需要申请空间。代码第 17 行将 s4 赋值给 s6虽然 s4 的长度大于 15但是当前 s6 的 capacity() 是 20完全能够放得下 s4所以不需要再申请空间。4char数组#include stdlib.h #include stdio.h #include string.h #include iostream int main() { char a[] Hello; char b[] {H, e, l, l, o}; char *c Hello; int d 0; printf(sizeof(a) %d, sizeof(b) %d, sizeof(c) %d\n, sizeof(a), sizeof(b), sizeof(c)); std::cout a , b , c std::endl; printf(a: %s, b: %s, c: %s; a %p, b %p, c %p, d %p\n, a, b, c, a, b, c, d); return 0; }a和b都是char数组但是a和b所占用的内存空间是不一样的a最后有一个字符串结束符b没有。c是字符指针。a和b是数组可以修改c是字符指针指向只读内存不能修改。a、b、c都是保存大栈上并且对比3者的地址大小可以看大栈是向下生长的c指向只读数据区。打印b的时候因为b是字符串类型直到遇到字符串结束符才会结束所以会打印两个Hello把a指向的字符串也打印出来了。sizeof传入数组名的话返回的是数组的长度c就是一个指针大小与字长有关。
延伸阅读

更多相关文章

2026/10/8 23:08:31

碳硅活系统动力学迁移闭环范式深度研究报告——基于虚拟生物沙盘、RAE递归对抗引擎与认知流形的全链路实证剖析

碳硅活系统动力学迁移闭环范式深度研究报告——基于虚拟生物沙盘、RAE递归对抗引擎与认知流形的全链路实证剖析 作者:方见华 单位:世毫九实验室 核心逻辑摘要 本报告围绕虚拟生物沙盘(碳基活系统试验场)→观测提炼碳基自组织/自稳…

2026/10/8 23:08:48

认知几何学中意识表征的通用纤维丛模型系统研究

认知几何学中意识表征的通用纤维丛模型系统研究 作者:方见华 单位:世毫九实验室 核心摘要(表征逻辑锚定) 以纤维丛的微分几何结构作为无歧义的数学中介,建立覆盖全体验类型的意识二分表征框架: 1. 底流形&a…

2026/10/9 11:01:26

求解器并发架构:进程与线程的边界与协同

很多跑算法或做工程的同学,嘴上挂着“并发”和“多线程”,一到真正碰求解器这类计算密集型任务,就翻车。要么内存爆炸,要么直接死锁卡死,要么 CPU 都跑满了但业务吞吐量上不去。这些问题的根源,往往不是数学…

2026/10/9 11:01:26

Windows10 安装 openclaw 前,先把 npm、node.js 与 PowerShell 环境理顺

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 10:56:25

HTML快速入门实战:从零构建语义化与可访问性页面

1. 为什么HTML值得你花一个下午认真过一遍很多人第一次接触网页开发,脑子里冒出来的第一个念头是“我要学一门编程语言”,然后一头扎进Python或者JavaScript的教程里。结果折腾了两周,连一个像样的页面都摆不出来。问题出在哪儿?出…

2026/10/8 10:03:18

Jev+Agent接管浏览器:browser-use实战与jev-ultrafast性能优化

1. 从“Jev”说起:为什么我要把Agent接进浏览器“Jev”这个词最近在圈子里出现的频率越来越高,很多人第一次听到会以为是某个新模型的名字,其实它更像是一种思路——把Jev模型的能力当作底座,通过Agent的方式去接管浏览器&#xf…

2026/10/8 10:03:20

多智能体集群实战:DeepAgents编排、MCP与A2A协议及Skills体系

1. 从"单兵作战"到"集群协同":多智能体编排到底在解决什么问题如果你最近在折腾 Agent 相关的东西,大概率会有一种感觉:单个 Agent 能做的事情,其实很快就摸到天花板了。你给它一个提示词,挂几个工…

2026/10/8 6:05:44

无源低通滤波器设计实战:从RC到LC,手把手教你避开那些坑

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 0:04:27

毕业论文初稿完成后首次进行AIGC疑似度自查的摸底与分流策略

毕业论文初稿完成后首次进行AIGC疑似度自查的摸底与分流策略当数万字的学位论文初稿经历开题、实验、问卷与多轮文献梳理最终成形时,绝大多数研究生都会面临一道全新的形式审查关卡:AIGC 疑似度排查。在高校毕业审核流程中,盲审前的文本检测通…

2026/10/9 0:04:27

食堂节能改造源头工厂,商用厨房设备焕新方案广受好评

商用厨房作为餐饮经营、单位供餐的核心后勤阵地,其设备配置、动线规划与运维体系直接决定后厨作业效率、运营成本与合规性。从基础的灶具、制冷存储设备,到油烟净化、水处理等配套系统,每一个环节的合理性都与食品安全、能耗管控、消防安全挂…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑