1

重複の可能性: C ++では、文字列オブジェクトに書き込むことができる
のに、文字列リテラルに書き込めないのはなぜですか?

私はwchar_t文字列を初めて使用したことがあり、多くの問題を抱えています。wchar_t *の文字にアクセスしようとするたびに、プログラムがセグメンテーション違反でクラッシュします。文字列内のある文字を別の文字に置き換えたい場合はどうすればよいですか?しかし、文字列の最後から文字を削除する場合はどうでしょうか。

wchar_t * my_string[] = L"Hello";
my_string[0] = L'Y'; // Should be "Yello". Instead, gives segmentation fault

[編集]関係ありません、私は自分自身をばかにしました。インターネットの他の場所で確認します。それは私のせいです、私はそのようなばかげた質問であなたを悩ませるべきではありません...

4

1 に答える 1

3

あなたは多くの情報を提供しませんでしたが、セグメンテーション違反について話しているので、メモリ管理機能は通常wchar_t1より大きいサイズでバイトに対して機能するという事実から生じる、最も一般的なエラーです。

charに対してポインタ演算を行う場合sizeof(char)、定義上1であるため、カウントされることはほとんどありません。ただしwchar_t、幅が広いため、バイト長が必要な場合は、の乗算を行うsizeof(wchar_t)必要があります。

wchar_t[編集]申し訳ありませんが、サンプルはそれ自体とは何の関係もありません。

wchat_t* my_string[]はwchar_t-pointersの配列であり、最初のポインタは「Hello」を指すように作成され、もう1つは初期化されていません。*を削除するだけです。

于 2012-03-31T19:16:04.370 に答える