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

用户37875

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

约翰尼斯·绍布-Litb

如果您只想将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::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()

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章