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 に答える