文字列から取得した文字を別の文字列に挿入しようとしています。ここで私は私の行動:1.私はシンプルに使いたい:
_someString.insert(somePosition, myChar);
_
2.挿入に(私の場合)char *またはstringが必要なため、エラーが発生しました
3。文字列ストリームを介してcharをchar *に変換しています:
_stringstream conversion;
char* myCharInsert;
conversion << myChar //That is actually someAnotherString.at(someOtherPosition) if that matters;
conversion >> myCharInsert;
someString.insert(somePosition, myCharInsert);
_
4.すべてが正常にコンパイルされているようですが、プログラムが取得をクラッシュさせます
_conversion >> myCharInsert;
_
ライン。
5. char *を文字列に置き換えようとしています:
_stringstream conversion;
char* myCharInsert;
conversion << myChar //That is actually someAnotherString.at(someOtherPosition) if that matters;
conversion >> myCharInsert;
someString.insert(somePosition, myCharInsert);
_
すべて問題ないようですが、someAnotherString.at(someOtherPosition)
がスペースになると、プログラムがクラッシュします。
では、これを正しく行うにはどうすればよいですか?
std::string::insert
のオーバーロードは多数あります。単一の文字を挿入するためのオーバーロードには、実際には3つのパラメーターがあります。
string& insert(size_type pos, size_type n, char c);
2番目のパラメーターn
は、c
を文字列のpos
の位置に挿入する回数(つまり、文字を繰り返す回数です)です。文字のインスタンスを1つ挿入したい場合は、単に1つ渡します。たとえば、
someString.insert(somePosition, 1, myChar);
最も簡単なのは、文字を文字列に変換する関数を提供することです。これを行う方法はたくさんあります。
string ToStr( char c ) {
return string( 1, c );
}
次に、単に言うことができます:
someString.insert(somePosition, ToStr(myChar) );
そして、文字列が必要であるがcharがある他の場合には、関数を使用します。
- すべてが正常にコンパイルされているようですが、プログラムが取得をクラッシュさせます
_conversion >> myCharInsert;
_
問題は、メモリ内のランダムな場所を指している(ユーザーのアドレス空間内にない可能性がある)myCharInsert
(_char*
_として宣言)を逆参照(アクセス)しようとし、未定義の動作(ほとんどの実装でクラッシュ)も同様です。
[〜#〜]編集[〜#〜]
文字列にchar
を挿入するには、string& insert ( size_t pos1, size_t n, char c );
overload を使用します。
追加
char
を_std::string
_に変換するにはread this 答え