如何将 a 转换std::string为 achar*或 a const char*?
std::string
char*
const char*
如果您只想将 a 传递给std::string需要的函数,const char*则可以使用
std::string str; const char * c = str.c_str();
如果你想得到一个可写的副本,比如char *,你可以这样做:
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自动调用你。有两种直接的方法可以解决这个问题。
new
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::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()