【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/7/23 19:53:19阅读更多 →
地信本科,应该学什么编程语言?什么阶段学?

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

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

2026/7/23 19:53:19阅读更多 →
惠普锐 Pro 16 全能轻薄本科普

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

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

2026/7/23 19:53:19阅读更多 →
LangGraph人机协同机制:AI代理开发中的HITL实践

LangGraph人机协同机制:AI代理开发中的HITL实践

1. 项目背景与核心概念在AI代理(Agent)开发领域,LangGraph作为LangChain生态的重要组件,提供了一种创新的"Human-in-the-loop"(人机协同)机制。这种设计模式允许开发者在AI代理执行关键操作时插入…

2026/7/24 2:54:38阅读更多 →
深入解析MSPM0 I2C目标模式:从寄存器配置到驱动开发实战

深入解析MSPM0 I2C目标模式:从寄存器配置到驱动开发实战

1. 项目概述与I2C目标模式核心价值在嵌入式系统开发中,I2C总线因其简洁的两线制(SDA数据线和SCL时钟线)和灵活的多主从架构,成为了连接各类传感器、存储器和外设的“血管”。但很多开发者,尤其是刚接触底层驱动的朋友&…

2026/7/24 2:54:38阅读更多 →
大模型应用开发的四大核心场景与技术实践

大模型应用开发的四大核心场景与技术实践

1. 大模型应用开发的四大核心场景解析在大模型技术爆发的当下,越来越多的开发者和企业开始尝试将大模型能力整合到实际业务中。但面对这个新兴领域,很多初学者常常感到无从下手。根据我在AI工程化落地项目中的实践经验,大模型应用开发主要聚焦…

2026/7/24 2:54:38阅读更多 →
AI效率工具测评:如何用技术战胜拖延症

AI效率工具测评:如何用技术战胜拖延症

1. 项目概述:当拖延症遇上AI工具作为一个常年与截稿日期赛跑的自由撰稿人,我书架上的《战胜拖延症》已经积了厚厚一层灰。直到去年偶然发现,市面上涌现出一批号称能"治疗拖延症"的AI效率平台,这让我产生了系统性测评的念…

2026/7/24 2:54:38阅读更多 →
Product Hunt热榜项目:数据采集与可视化分析实践

Product Hunt热榜项目:数据采集与可视化分析实践

1. 项目概述Product Hunt作为全球知名的产品发现平台,每天都有数百款新产品上线。这个"Product Hunt每日热榜"项目,旨在系统化地追踪、整理和分析平台上的热门产品数据。不同于简单的截图或链接汇总,我们通过技术手段实现了自动化数…

2026/7/24 2:54:38阅读更多 →
AI训练数据危机:旧书为何成为大模型的“纯净”素材?

AI训练数据危机:旧书为何成为大模型的“纯净”素材?

这次我们来看一个很有意思的现象:AI公司正在大量购买旧书,原因竟然是这些书"没有AI污染"。这背后反映的是当前大模型训练面临的数据质量危机。随着AI模型训练对高质量数据的需求激增,互联网上的新鲜内容已经越来越难以满足要求。很…

2026/7/24 2:52:38阅读更多 →
Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/24 0:58:53阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/24 0:58:53阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/24 0:58:53阅读更多 →
我的编程之路:第一篇博客

我的编程之路:第一篇博客

大家好,我是一名编程初学者,同时这也是我编程学习之路上的第一篇博客。在这里,我想要向大家介绍我的一些想法和规划。a.自我介绍我是一个刚刚接触编程的新手,目前在学习c语言,我对编程世界充满了强烈的好奇。当然&…

2026/7/24 0:00:06阅读更多 →
【LeetCode 54】螺旋矩阵

【LeetCode 54】螺旋矩阵

问题描述: 解法: 1、模拟(参考自【LeetCode 54】螺旋矩阵-CSDN博客) int *spiralOrder(int **matrix, int matrixSize, int *matrixColSize, int *returnSize) {static const int dirs[4][2] {{0, 1}, {1, 0}, {0, -1}, {-1, …

2026/7/24 0:00:06阅读更多 →
2026 WAIC:模型隐身、智能体疯野,厂商竞赛聚焦办公场景与商业闭环

2026 WAIC:模型隐身、智能体疯野,厂商竞赛聚焦办公场景与商业闭环

知春路不相信模型领先今年WAIC大会,昔日AI六小龙来了五家,分别是Kimi、阶跃星辰、Minimax、百川智能、零一万物。连放弃基模的百川和零一万物都来了,唯一缺席的竟是近几个月来风光无限的智谱。(DeepSeek一直不参加)WAI…

2026/7/24 0:00:06阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/23 22:58:43阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/23 18:58:18阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/23 18:58:18阅读更多 →