您的位置:首页 > 其它

convert a std::string to const char* or char*

2017-05-09 00:00 351 查看
If you just want to pass a
std::string
to a function that needs
const char*
you can use

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

If you want to get a writable copy, like
char *
, you can do that with this:

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;

Edit: Notice that the above is not exception safe. If anything between the
new
call and the
delete
call throws, you will leak memory, as nothing will call
delete
for you automatically. There are two immediate ways to solve this.

boost::scoped_array

boost::scoped_array
will delete the memory for you upon going out of scope:

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

This is the standard way (does not require any external library). You use
std::vector
, which completely manages the memory for you.

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

// get the char* using &writable[0] or &*writable.begin()
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: