发布日期:2018-03-26
如何将 std::string转换为const char*或者char*?+ 查看更多
如何将 std::string转换为const char*或者char*?
+ 查看更多
发布日期:2018-02-26 17:14
分类:CPlusPlus
浏览次数:205
如下:
如何将 std::string转换为const char*或者char*?
如何将 std::string转换为const char*或者char*?
回答:
如果你想向一个需要const char*的函数里传递std::string作为参数,你可以使用:
std::string str; const char * c = str.c_str();
如果你想得到一个类似于char*的可写副本,你可以这样做:
这是一种标准的方式(不需要额外的库)。使用std::vector你将会自己管理内存。
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(删除)之间调用抛出异常的话,将会造成内存泄漏,因为没有自动删除机制。
以下是两种快速的方式解决问题:
1.boost::scoped_array
boost::scoped_array 将会删除你溢出的内存。
boost::scoped_array 将会删除你溢出的内存。
std::string str; boost::scoped_array2.std::vectorwritable(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::string str; std::vectorwritable(str.begin(), str.end()); writable.push_back('\0'); // get the char* using &writable[0] or &*writable.begin()