- (꒪ꇴ꒪ ),Hello我是祐言QAQ
- 我的博客主页:C/C++语言,Linux基础,ARM开发板,软件配置等领域博主🌍
- 快上🚘,一起学习,让我们成为一个强大的攻城狮!
- 送给自己和读者的一句鸡汤🤔:集中起来的意志可以击穿顽石!
- 作者水平很有限,如果发现错误,可在评论区指正,感谢🙏
在C++编程中,有一个强大的工具,它极大地简化了字符串处理,那就是string类。与C语言中的字符串相比,string类不仅更安全,还提供了更多的功能。本篇博客将详细介绍C++中的string类,以及它与C语言字符串的区别,方便大家快速入门C++。
一、 动态分配与自动管理
在C语言中,字符串是通过字符数组表示的,需要手动管理内存的分配和释放。而在C++中,string类是动态分配的字符串,它自动处理内存管理,避免了许多内存错误。这就意味着我们无需担心缓冲区溢出和内存泄漏等问题,大大节约开发时间(较小的代码量),也避免了一些不必要的犯错(手动管理内存的复杂性)。
下面我们就C与C++在内存管理上进行一下代码量对比体会一下动态分配与自动管理。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main() {
//分配
char *dynamicString = (char *)malloc(20 * sizeof(char));
strcpy(dynamicString, "Dynamic string handling");//strcpy写入数据
printf("%s\n", dynamicString);//打印
//再分配
dynamicString = realloc(dynamicString, 30 * sizeof(char));
strcat(dynamicString, " in C"); //拼接
printf("%s\n", dynamicString);
//释放
free(dynamicString);
return 0;
}
然而在C++中,这些操作将不会在出现,string类将自动处理内存管理,下面让我们来看看C++实现同样的操作所需代码量吧:
#include <iostream>
#include <string>
using namespace std;
int main() {
//创建字符串
string dynamicString = "Dynamic string handling";
cout << dynamicString << endl;//输出
dynamicString += " in C++"; // 自动扩展字符串长度
cout << dynamicString << endl;//再输出
return 0;
}
我天这么少嘛,即使是一个新学C++的同学恐怕也能看懂吧,所以这就是C++被发开的初衷,让编程更简单!
二、长度管理
C语言中的字符串以NULL终止,需要使用特定的字符(通常是‘\0’)表示字符串的结束,容易出现缓冲区溢出。而C++中的string类自带长度信息,不需要显式的NULL终止字符,从而更安全。

代码:
#include <iostream>
#include <string>
using namespace std;
int main() {
string s = "Hello, world!";
cout << "字符串长度为: " << s.length() << endl;
return 0;
}
三、 操作和功能
C语言中的字符串操作需要调用库函数,例如strcpy、strcat等。而C++中的string类提供了丰富的成员函数,例如append、insert、substr等,使字符串操作更加方便。

代码:
#include <iostream>
#include <string>
using namespace std;
int main() {
string s = "Hello";
s.append(", world!"); // 追加字符串
cout << s << endl;
s.insert(5, " there"); // 插入字符串
cout << s << endl;
s.erase(6, 5); // 删除一部分字符串
cout << s << endl;
return 0;
}
四、拼接和连接
C语言中的字符串拼接需要手动分配足够的空间,并使用库函数strcat进行拼接。
char str1[50] = "Hello, ";
char str2[] = "world!";
char result[100];
strcpy(result, str1); // 复制 str1 到 result
strcat(result, str2); // 连接 str2 到 result
printf("%s\n", result); // 输出: Hello, world!
C++中的string类支持直接使用+运算符进行字符串连接,极大地简化了操作。
#include <iostream>
#include <string>
using namespace std;
int main() {
string str1 = "Hello, ";
string str2 = "world!";
string result;
result = str1 + str2;
cout << result << endl; // 输出: Hello, world!
return 0;
}
五、 赋值和复制
C语言中的字符串赋值需要使用库函数strcpy或逐字符复制。
char source[] = "Hello";
char destination[20];
strcpy(destination, source);
C++中的string类可以直接使用‘=’进行赋值,同时支持深拷贝,不需要手动管理内存。
string source = "Hello";
string dest;
dest = source;
六、 可迭代性
C语言中的字符串不是容器,难以方便地进行迭代和遍历。
char str[] = "Hello";
for (int i = 0; str[i] != '\0'; i++) {
printf("%c\n", str[i]);
}
C++中的string类是标准的容器,支持使用迭代器或范围循环进行遍历。
string str = "Hello";
for (char c : str) {
cout << c << endl;
}
七、 扩展性和自定义
C语言中的字符串操作受限,难以实现更高级的字符串处理。C++中的string类允许自定义成员函数和操作,支持更复杂的字符串处理需求。
#include <iostream>
#include <string>
using namespace std; // 使用标准命名空间,避免频繁使用std::
class MyString : public string { // 定义一个继承自string的自定义类MyString
public:
void customFunction() { // 定义自定义成员函数customFunction
cout << "Custom function for MyString" << endl; // 输出自定义信息
}
};
int main()
{ // 主函数开始
MyString customStr = "Custom String"; // 创建一个MyString类型的对象customStr,初始化为"Custom String"
cout << customStr << endl; // 输出customStr的内容
customStr.customFunction(); // 调用customFunction方法,输出自定义信息
return 0; // 返回0,表示程序正常结束
}
通过这篇博客,深入探索了C++中的string类,了解了它相较于C语言字符串的优势。string类提供了更安全、更方便以及更功能丰富的字符串处理方式,是现代C++编程中的强大工具。无论是拼接、赋值、遍历还是其他字符串操作,string类都能显著地提升代码的可读性、可维护性和安全性。在日常的C++开发中,强烈推荐使用string类来处理字符串,以获得更好的开发体验。
更多C语言、Linux系统、ARM板实战和数据结构相关文章,关注专栏:
手撕C语言
玩转linux
脚踢数据结构
6818(ARM)开发板实战
📢写在最后
- 今天的分享就到这啦~
- 觉得博主写的还不错的烦劳
一键三连喔~ - 🎉感谢关注🎉



















![[保研/考研机试] KY190 查找第K小数 北京邮电大学复试上机题 C++实现](https://img-blog.csdnimg.cn/bcab1ec087c640adb21a509a915b76e3.png)