string转const char用c_str(),指针只读且生命周期依赖原string;2. 转可写char需手动复制并管理内存;3. 可用栈数组避免动态分配;4. char*转string可直接构造。

在C++中,将std::string转换为char*或const char*是常见操作。由于std::string是类类型,而char*是原始字符指针,转换时需要注意生命周期和可写性问题。
1. string 转 const char*
使用std::string的成员函数c_str()可以获取指向内部字符串的const char*指针,适用于只读场景(如传参给C风格函数)。
- 返回的是以\0结尾的C风格字符串
- 指针所指向的内容不可修改
- 生命周期与原string对象一致,string析构后指针失效
示例代码:
std::string str = "Hello";
const char* cstr = str.c_str();
printf("%s\n", cstr); // 正确使用
2. string 转 char*(可写副本)
如果需要可修改的char*,必须手动复制字符串内容到新分配的内存中。
立即学习“C++免费学习笔记(深入)”;
- 使用
strcpy或strncpy进行复制 - 需提前分配足够空间(注意包含末尾\0)
- 动态分配的内存记得释放,避免泄漏
示例代码:
std::string str = "Hello"; char* writable = new char[str.length() + 1]; // 多1字节给\0 strcpy(writable, str.c_str()); writable[0] = 'h'; // 可修改 // ... 使用后 delete[] writable; // 记得释放
3. 使用数组(栈上分配)
若字符串长度已知且较短,可用固定数组代替动态分配。
std::string str = "Hello"; char buffer[256]; strncpy(buffer, str.c_str(), sizeof(buffer) - 1); buffer[sizeof(buffer) - 1] = '\0'; // 确保结尾
4. char* 转 string
反过来转换更简单,可以直接用构造函数或赋值。
const char* cstr = "Hello"; std::string str(cstr); // 或 std::string str = cstr;
支持char*、const char*、带长度的指针等多种方式。
基本上就这些常用方法,关键注意指针有效性与内存管理。











