您的位置:首页 > 其它

Convert std::string to const char* or char*

2014-03-07 18:37 633 查看
Q:

How can I convert an 
std::string
 to
char*
 or
const
char*
?

A:

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.size() + 1);
std::copy(str.begin(), str.end(), writable.begin());

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


From:http://stackoverflow.com/questions/347949/convert-stdstring-to-const-char-or-char
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐