--- title: "c风格字符串与string的相互转换" created: 2025-11-28 tags: - 算法 --- # c风格字符串与string的相互转换 C风格字符串(也就是以空字符`'\0'`结尾的字符数组)和C++中的`std::string`类型之间的转换是常见的操作。 这两种字符串类型各有优缺点: C风格字符串在C语言中广泛使用, 而`std::string`提供了更现代、更安全且易于使用的接口。 ### 从C风格字符串到`std::string` 将C风格字符串转换为`std::string`非常直接,因为`std::string`的构造函数可以接受一个C风格字符串作为参数: ```cpp const char* c_str = "Hello, world!"; std::string str(c_str); ``` ### 从`std::string`到C风格字符串 将`std::string`转换为C风格字符串同样简单。`std::string`提供了一个名为`c_str()`的成员函数,它返回一个指向以空字符结尾的字符数组的指针,这个字符数组包含了`std::string`的数据: ```cpp std::string str = "Hello, world!"; const char* c_str = str.c_str(); ``` 请注意,`c_str()`返回的是指向内部数据的指针,你不应该尝试修改这个字符数组,而且在`str`被修改或销毁之后,这个指针可能会变得无效。 ### 注意事项 - 在使用`c_str()`得到的C风格字符串指针时,需要注意指针的有效性。一旦原始的`std::string`对象被修改或销毁,通过`c_str()`获取的指针可能指向的是已经释放或改变的内存区域。 - 如果需要修改`std::string`生成的C风格字符串,应该先将其复制到一个新的字符数组中。 - 当需要将C风格字符串传递给只接受`std::string`参数的函数时,直接传递C风格字符串即可,因为`std::string`的构造函数会自动进行转换。 这些转换使得在C风格字符串和`std::string`之间相互操作变得非常方便,有助于在需要使用C库函数时与C++代码无缝集成。 --- ⬅️ [[getline|getline]] 🏠 [[00-刷题理模型]] ➡️ [[2-Learning/02-算法/03-刷题理模型/串相关模型/基本操作/reverse|reverse]]