string转char用c_str()获取只读指针,char转string可用构造函数复制内容,需可修改缓冲区时应预分配空间并取地址。

在C++中,string 和 char* 的相互转换是常见操作,尤其在调用C风格函数或处理底层字符串时非常实用。下面介绍它们之间的转换方法。
1. string 转 char*
要将 std::string 转换为 const char*,可以使用 c_str() 或 data() 方法:
- c_str():返回指向以空字符结尾的C风格字符串的指针,内容与 string 相同。
- data():在C++11之前,data() 返回的字符串不一定以 '\0' 结尾;但从C++11开始,data() 和 c_str() 行为一致,都返回以 '\0' 结尾的字符数组。
示例代码:
#include#include int main() { std::string str = "Hello, world!"; const char* ptr = str.c_str(); // 推荐方式 std::cout << ptr << std::endl; return 0; }
注意:返回的是 const char*,不能修改其内容。如果需要可修改的 char*,需自行复制。
立即学习“C++免费学习笔记(深入)”;
2. char* 转 string
将 char* 转为 std::string 非常简单,可以直接用构造函数或赋值:
- C++字符串对象会自动复制 char* 指向的内容,不依赖原指针生命周期。
- 只要 char* 指向的是以 '\0' 结尾的有效字符串,转换就安全。
示例代码:
#include#include int main() { const char* ptr = "Hello, C++"; std::string str(ptr); // 用构造函数 // 或者 std::string str2 = ptr;
std::cout << str << std::endl; return 0;}
3. 获取可修改的 char*
有时需要从 string 得到可修改的字符数组(如用于填充或传给C函数),可以通过以下方式:
std::string str(10, '\0'); // 预分配空间 char* mutable_buf = &str[0]; // 获取首字符地址(C++98/03不保证有效,C++11起允许) // 或使用 data()(C++17起 data() 返回非const指针) char* mutable_buf2 = str.data();注意:操作过程中不能调用可能引起重分配的 string 方法(如 push_back、resize 等),否则指针失效。
基本上就这些。记住:string 到 char* 用 c_str() 获取只读指针,反过来直接构造即可。需要修改内容时,确保使用正确的可写缓冲区。转换不复杂,但容易忽略 const 和生命周期问题。











