小编典典

如何将 std::string 转换为 const char* 或 char*

all

如何将 a 转换std::string为 achar*或 a const char*


阅读 397

收藏
2022-02-28

共1个答案

小编典典

如果您只想将 a
传递给std::string需要的函数,const char*则可以使用

std::string str;
const char * c = str.c_str();

如果你想得到一个可写的副本,比如char *,你可以这样做:

std::string str;
char * writable = new char[str.size() + 1];
std::copy(str.begin(), str.end(), writable);
writable[str.size()] = '\0'; // don't forget the terminating 0

// don't forget to free the string after finished using it
delete[] writable;

编辑
:请注意,上述内容不是异常安全的。如果new调用和delete调用之间有任何东西抛出,你将泄漏内存,因为没有任何东西会delete自动调用你。有两种直接的方法可以解决这个问题。

boost::scoped_array

boost::scoped_array超出范围时将为您删除内存:

std::string str;
boost::scoped_array<char> writable(new char[str.size() + 1]);
std::copy(str.begin(), str.end(), writable.get());
writable[str.size()] = '\0'; // don't forget the terminating 0

// get the char* using writable.get()

// memory is automatically freed if the smart pointer goes 
// out of scope

标准::向量

这是标准方式(不需要任何外部库)。您使用std::vector,它完全为您管理内存。

std::string str;
std::vector<char> writable(str.begin(), str.end());
writable.push_back('\0');

// get the char* using &writable[0] or &*writable.begin()
2022-02-28