环球军事
字符串数组(C++中String类型和char数组各自的特点及用法)

在C++中,string和char数组都是用来表示字符串的,但它们有不同的特性及用法。



关系对比

特性

std::string

char 数组

内存管理

动态分配,自动管理

固定大小,手动管理

长度

可变

固定

安全性

避免缓冲区溢出

需要小心越界

功能

丰富的成员函数

只有C字符串函数


相互转换

  1. char数组转 string
#include <iostream>#include <string>using namespace std;int main() {    // 1、直接赋值    char charArr[] = "Hello World";    string str1 = charArr;    // 2、构造函数    string str2(charArr);    // 3、通过assign方法    string str3;    str3.assign(charArr);    // 4、从char数组中截取部分创建字符串    char longArr[] = "What a nice to do nothing";    string str4(longArr, 4);  // 只取前4个字符: "What"    cout << "str1: " << str1 << endl;    cout << "str2: " << str2 << endl;    cout << "str3: " << str3 << endl;    cout << "str4: " << str4 << endl;    return 0;}


2. string转char数组

#include <iostream>#include <string>#include <cstring>using namespace std;int main() {    string str = "Hello World";    // 1、c_str() - 返回const char*    const char* charP1 = str.c_str();    cout << "c_str(): " << charP1 << endl;    // 2、data() - C++17起与c_str()相同    const char* charP2 = str.data();    cout << "data(): " << charP2 << endl;    // 3、copy() - 复制到已有的char数组    char charArr1[20];    str.copy(charArr1, str.length());    charArr1[str.length()] = '\0';  // 手动添加结束符    cout << "copy(): " << charArr1 << endl;    return 0;}


3. vector<char>作为char数组的安全替代

#include <iostream>#include <string>#include <vector>using namespace std;int main() {    string str = "Dynamic string";    // 安全地将string内容复制到vector<char>    vector<char> charVec(str.begin(), str.end());    charVec.push_back('\0');  // 添加结束符    // 访问vector中的C字符串    cout << "Vector as string: " << &charVec[0] << endl;    // 处理可能包含空字符的string    string binaryData = "Hello";    binaryData += '\0';  // 插入空字符    binaryData += "World";    cout << binaryData << endl;    // 使用data()和size()处理二进制数据    vector<char> binaryVec(binaryData.data(),        binaryData.data() + binaryData.size());    cout << "Binary data size: " << binaryVec.size() << endl;    cout << "Binary data: " << &binaryVec[0] << endl;    return 0;}


总结

  1. c_str()返回的指针在string修改后可能失效
  2. char数组需要手动管理内存和边界
  3. 优先使用std::string,除非需要与C API交互
  4. 使用std::vector<char>作为char数组的安全替代

总的来说,std::string更方便、更安全,而char数组在与C语言代码交互时更有用。根据具体需求选择合适的类型。


顶一下()     踩一下()

热门推荐

发表评论
0评