c风格字符串与string的相互转换

C风格字符串(也就是以空字符'\0'结尾的字符数组)和C++中的std::string类型之间的转换是常见的操作。

这两种字符串类型各有优缺点:

    C风格字符串在C语言中广泛使用,

    而`std::string`提供了更现代、更安全且易于使用的接口。

从C风格字符串到std::string

将C风格字符串转换为std::string非常直接,因为std::string的构造函数可以接受一个C风格字符串作为参数:

const char* c_str = "Hello, world!";
std::string str(c_str);

std::string到C风格字符串

std::string转换为C风格字符串同样简单。std::string提供了一个名为c_str()的成员函数,它返回一个指向以空字符结尾的字符数组的指针,这个字符数组包含了std::string的数据:

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 🏠 00-刷题理模型 ➡️ reverse