好问题
Good  Question
  • 首 页
  • 问题
    • PHP
    • JAVA
    • CPlusPlus
    • C#
    • SQL
  • 关 于
  • 联 系
如何将 std::string转换为const char*或者char*? 关闭 返回上一级  

如何将 std::string转换为const char*或者char*?
+ 查看更多

发布日期:2018-02-26 17:14
分类:CPlusPlus
浏览次数:99
如下:
如何将 std::string转换为const char*或者char*?

回答:

如果你想向一个需要const char*的函数里传递std::string作为参数,你可以使用:
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(删除)之间调用抛出异常的话,将会造成内存泄漏,因为没有自动删除机制。
以下是两种快速的方式解决问题:
 
1.boost::scoped_array
boost::scoped_array 将会删除你溢出的内存。
std::string str;
boost::scoped_array 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
2.std::vector
这是一种标准的方式(不需要额外的库)。使用std::vector你将会自己管理内存。
std::string str;
std::vector writable(str.begin(), str.end());
writable.push_back('\0');

// get the char* using &writable[0] or &*writable.begin()
上一篇为什么C++程序员要尽量减少使用new?
#include 和#include“filename”有什么区别?下一篇
下一篇#include 和#include“filename”有什么区别?

最新文章

  • 函数`__construct`用来干嘛的
    发布日期:2018-03-26
  • 通过访客的IP得到他们的地区
    发布日期:2018-03-26
  • 合并两个PHP对象的最好的方法是什么?
    发布日期:2018-03-26
  • 该如何把一该如何把一个对象转化成数组?
    发布日期:2018-03-26
  • 什么是输出缓冲区?
    发布日期:2018-03-26
  • 在PHP中怎么把用逗号分隔的字符串分隔在一个数组里?
    发布日期:2018-03-26
  • 在PHP中使用foreach循环时查找数组的最后一个元素
    发布日期:2018-03-26
关于好问
收集整理一些有用的问题和回答,造福中国的程序旺和IT喵们!
友情链接
起飞页 
相关信息
版权声明
Copyright © 2016 - 2017  苏州卡达网络科技有限公司 好问 GOODQ.TOP 备案号:苏ICP备09008221号-5