【C++字符串】char*、const char*、char[]和std::string
专栏网址https://blog.csdn.net/zhujushu/category_13112687.html0.概述在程序开发中字符串操作是必不可少的功能之一。在众多编程语言中C对字符串有着底层、较良好的支持。C 提供了以下两种字符串表示形式C语言风格 const char*、char[]、char* 等类型C std::string 类类型。本文将介绍以上字符串类型使用的方式并重点讲述std::string的功能。1.const char*const char* 是一个不可变的字符串常量类型看以下代码const char* Str Hello World!;里面 Str、Hello World! 都是const char*类型的它可以是左值也可以是右值。注意区分const char* 和 char* constchar * const CConst; //指向字符的静态指针 const char * ConstC; //指向静态字符的指针当const char*的值是一个右值时C编译器会在const char*的末尾添加\0。2.char[]char[]代表字符数组可以对应一个字符串如char b[]string2; //b的长度是字符的数量1 //因为gcc/g编译器会在const char*的末尾添加\0这里b是一个char数组字符数组,每个元素对应一个字符最后的元素为\0。区别如下注意char型数组的名字也是该数组首元素的地址是常量不能改变。但char型数组的每个元素可以改变。char b[]Hello World;//定义 printf(%s\n,b);//输出结果Hello World3.char*char* 是指向字符串的指针与const char*不同的是char*的值可以改变。看以下代码char* Str Hello World!;//定义 StrHi!; printf(%s\n,Str);输出Hi!里面 Str是char*类型的。注意区分char[] 和 char* :char * C Hello!; C Hi!;//合法 C[0] A;//非法访问只读内存非法 char CC[] Hello!; CC Hi!;//报错首元素地址无法改变 CC[0] A;//合法在ISO C中char* 被指明是危险的它可能导致内存泄漏、溢出等风险在开发中要慎用。4.std::stringstd::string是 C 标准库中提供的字符串类用于处理动态大小的字符序列。它属于std命名空间封装了字符串的存储和管理提供了丰富的成员函数和操作符简化了字符串操作。头文件使用std::string要引入string.h头文件代码如下#include string.h //using namespace std; //使用引入的标准库的全部内容使用时无需std::前缀但容易造成重声明和污染 //using std::string; //同using namespace std;但只使用string类类型推荐基本用法声明和初始化std::string可以通过多种方式完成std::string str1; // 默认初始化空字符串 std::string str2(Hello); // 从 C 风格字符串初始化 std::string str3(str2); // 从另一个 std::string 初始化 std::string str4(5, a); // 重复字符初始化结果为 aaaaa常用成员函数std::string提供了大量成员函数以下是一些常用功能访问字符char c str2[0]; // 通过下标访问不检查边界 char c2 str2.at(1); // 通过 at() 访问会检查边界修改字符串str1.append( World); // 追加字符串 str1.push_back(!); // 追加单个字符 str1.insert(5, C); // 在指定位置插入 str1.erase(5, 4); // 删除子串容量操作size_t len str1.size(); // 获取字符串长度 bool empty str1.empty(); // 判断是否为空 str1.resize(10); // 调整字符串大小字符串操作查找和替换size_t pos str1.find(World); // 查找子串 if (pos ! std::string::npos) { str1.replace(pos, 5, Universe); // 替换子串 }子串提取std::string sub str1.substr(6, 5); // 提取从位置 6 开始的 5 个字符输入输出std::string可以与标准输入输出流配合使用std::string input; std::cin input; // 读取一个单词 std::getline(std::cin, input); // 读取一行 std::cout input std::endl; // 输出字符串与 C 库函数互通与 C 库函数交互时由于使用的是const char* 或 char[]会造成类型不匹配。std::string 提供了c_str()以获取const char*指针const char* cstr str1.c_str();性能与注意事项std::string动态管理内存自动处理存储空间的分配和释放。频繁的字符串拼接可能导致多次内存重新分配影响性能。可以使用reserve()预分配空间优化。现代 C 扩展C17 引入了std::string_view提供对字符串的非拥有视图适合只读场景避免不必要的拷贝std::string_view view(str1.data(), 5); // 创建前 5 个字符的视图5.总结C提供了多种字符串处理方式包括C风格字符串const char*、char[]、char*和更现代的std::string类。C风格字符串需要手动管理内存且易出错而std::string通过自动内存管理简化了操作并提供丰富的成员函数支持查找、替换、子串提取等常见需求。std::string与标准输入输出流无缝集成同时支持通过c_str()与C风格字符串交互。C17引入的std::string_view进一步优化了只读场景的性能。开发中应优先使用std::string以提升安全性和可维护性仅在必要场景下谨慎使用C风格字符串。温馨提示请留下点赞

相关新闻

武汉老板注意:光谷企业做展厅,别再拿“科技感“说事了

武汉老板注意:光谷企业做展厅,别再拿“科技感“说事了

‍武汉光谷,"中国光谷"这块招牌挂了快 40 年。2025 年的光谷,聚集了 1.6 万家高新技术企业、6 家国家实验室、3 个国家大科学装置。这些企业几乎家家都想做展厅,但 80% 的光谷展厅,第一句话是"科技感"。科技感…

2026/10/17 23:38:00 阅读更多 →
地信本科,应该学什么编程语言?什么阶段学?

地信本科,应该学什么编程语言?什么阶段学?

首先,一般地信本科的课程设置里就包含C、C这几种底层开发语言,但是通常不教C# ,因为C#是专门的GIS桌面开发课程,比如使用ArcEngine进行桌面端的开发。主流的GIS开发编程更倾向WebGIS或Python。C语言C语言是计算机的底层语言&#…

2026/10/18 8:58:49 阅读更多 →
惠普锐 Pro 16 全能轻薄本科普

惠普锐 Pro 16 全能轻薄本科普

惠普锐 Pro 16 是面向学生、职场创作者的 16 英寸大屏全能本,搭载标压锐龙 7 H255,标配 24GB 大内存 1TB 固态,叠加国家补贴与平台优惠后到手仅 5403.5 元,兼顾性能、大屏与高性价比,下面分四大维度解析。 一、锐龙标…

2026/10/18 19:42:34 阅读更多 →

最新新闻

OSPF多区域实战:LSA类型、ABR机制与特殊区域配置

OSPF多区域实战:LSA类型、ABR机制与特殊区域配置

很多人学OSPF时,单区域配置玩得很溜,一到多区就懵了:明明就是两条network命令的事,为什么还要分骨干区、特殊区,甚至搞出一堆LSA类型?更麻烦的是,多区之后再看路由表,你会发现区域间…

2026/10/18 20:43:12 阅读更多 →
Ruby on Rails 机票电商项目实战:搜索、下单、支付回调全链路拆解

Ruby on Rails 机票电商项目实战:搜索、下单、支付回调全链路拆解

简介:eyoo:旅游机票电商平台(重构版)是一份基于Ruby技术栈的在线机票销售系统源码,面向具备一定Web开发基础、希望深入理解电商平台架构的开发者与学习者。项目围绕Ruby语言与Rails框架展开,涵盖MVC分层、ActiveRecord…

2026/10/18 20:43:12 阅读更多 →
Cursor与Claude Code Skills实战:8类技能提升AI编程效率

Cursor与Claude Code Skills实战:8类技能提升AI编程效率

过去半年,我把 Cursor 和 Claude Code 当成了日常开发的主力编辑器,基本告别了“自己写一遍再让 AI 重写一遍”的低效循环。真正让这两个工具从“聊天机器人”变成“团队协作者”的,不是模型版本升级,而是 Skills。这个词最近火得…

2026/10/18 20:43:12 阅读更多 →
JSP+SSM医院住院系统:真实临床业务闭环实现

JSP+SSM医院住院系统:真实临床业务闭环实现

简介:这是一套面向计算机专业本科生的Java Web毕业设计实战项目,聚焦医院住院管理业务场景,适用于课程设计、毕设选题与SSM框架入门实践。资源完整包含可运行源码、功能演示视频及详细说明文档,帮助学习者掌握B/S架构下医疗信息系…

2026/10/18 20:43:12 阅读更多 →
Android Compose AI组件库:从流式文本到图像生成的架构实践

Android Compose AI组件库:从流式文本到图像生成的架构实践

最近在忙一个跨平台的智能应用项目,AI能力要在Android端做完整的对话、图片生成、语义搜索体验。搭到第三块页面的时候我就开始烦了:每次都是把网络流、状态管理、UI拼装从头粘一遍,代码长得几乎一样,效果却总有细微出入。后来看到…

2026/10/18 20:43:12 阅读更多 →
MCP Client 与 LLM 协作实战:工具调用与上下文管理全解析

MCP Client 与 LLM 协作实战:工具调用与上下文管理全解析

1. 从项目背景说起:MCP 到底解决了什么问题说到 MCP(Model Context Protocol,模型上下文协议),我先讲一个痛点场景。假设你手里有 5 个 AI 应用,想给每个应用接上 3 类外部能力:数据库查询、文件…

2026/10/18 20:42:12 阅读更多 →

日新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/18 0:00:55 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/18 0:00:55 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

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

2026/10/18 0:55:02 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

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

2026/10/17 17:22:31 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

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

2026/10/18 12:16:16 阅读更多 →