2017-04-20 13 views
0

文字列を初期化し、結果の文字配列を変更したいと考えています。私はした:文字列から文字配列を変更する

std::string str = "hello world"; 
const char* cstr = str.c_str(); 

// Modify contents of cstr 

しかし、cstrはconstなので、私は要素を変更することはできません。 constを削除すると、c_str()は使用できません。

これを達成する最も良い方法は何ですか?

+3

文字列自体を変更できないのはなぜですか? –

+1

*これを達成する最良の方法は何ですか?*単に 'std :: string'を直接変更してください。 – NathanOliver

+0

これを 'const_cast'で行うことは可能ですが、文字列内の内部メンバーはバッファを変更していると仮定し、変更方法によって予期しない後で奇妙な行動。 (私が知っていることを私に尋ねないで、私はそれについてもう一度考えるつもりはない) – Donnie

答えて

4

strthe std::string member functionsに変更するだけです。

これらの機能には、operator[]が含まれます。

C++ 11(およびそれに準拠した実装)では、&str[0]は必要なポインタです。

0

これを行うための最善かつ最も簡単な方法は、単に直接operator[]独自のを使用してstd::stringを変更することです:

str[0] = 'G'; // "Gello world" 

あなたは本当にC-文字列をコピーする必要がある場合は、何らかの理由で、あなた

char* buffer = new char[str.length() + 1]; 
strcpy(buffer, str.c_str()); 
delete[] buffer; 

ここで明白な欠陥は動的割り当てです。 std::stringを直接変更するだけで、あなたの人生を楽にするために、そのクラスが書かれたものです。

+0

@RemyLebeauありがとう。 –

関連する問題