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

Answer

If you just want to pass a std::string to a function that needs const char* you can use

std::string str;constchar* 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 =newchar[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 itdelete[] 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 writable(newchar[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 writable(str.begin(), str.end());
writable.push_back(\'\\0\');// get the char* using &writable[0] or &*writable.begin()

All string Questions

Ask your interview questions on string

Write Your comment or Questions if you want the answers on string from string Experts
Name* :
Email Id* :
Mob no* :
Question
Or
Comment* :
 





Disclimer: PCDS.CO.IN not responsible for any content, information, data or any feature of website. If you are using this website then its your own responsibility to understand the content of the website

--------- Tutorials ---