0

我正在尝试构建一个可以重用的实用程序类,它可以转换std::string to a char*

char* Foo::stringConvert(std::string str){
      std::string newstr = str;
      // Convert std::string to char*
      boost::scoped_array<char> writable(new char[newstr.size() + 1]);
      std::copy(newstr.begin(), newstr.end(), writable.get());
      writable[newstr.size()] = '\0'; 
      // Get the char* from the modified std::string
      return writable.get();
}

当我尝试从 stringConvert 函数中加载输出时,该代码有效,但是在我的应用程序的其他部分使用时,此函数返回垃圾。

例如:

Foo foo;
char* bar = foo.stringConvert(str);

上面的代码返回垃圾。这类问题有什么解决方法吗?

4

2 回答 2

2

我将假设writable是一个具有自动持续时间的对象,它破坏了char*它在析构函数中包含的内容——这是你的问题——无论writable.get()返回什么都不再有效。

只是返回 a std::string,你到底为什么需要 raw char *

于 2012-06-25T08:51:13.690 回答
1

为什么不直接使用std::string.c_str()?这是一个库方法,可以满足您的需要。

于 2012-06-25T08:57:30.253 回答