3

したがって、コンパイラは、これが文字列リテラルから char* への非推奨の変換であると教えてくれます。

 char* myString = "i like declaring strings like this";

これについて心配する必要がありますか?これは間違った方法ですか?

myStringを受け入れる関数に渡す必要があります。この変換なしchar*で を適切に初期化する必要があるのは誰ですか?char*

4

2 に答える 2

9

はい、あなたはそれについて心配する必要があります!

次のように宣言する必要があります。

const char* myString = "i like declaring strings like this";

mystringは文字列リテラルへのポインタ"i like declaring strings like this"であり、文字列リテラルはメモリ空間(実装定義)に存在しますが、プログラムで変更しないでください。
文字列リテラルを変更すると、未定義の動作が発生します。

したがって、C ++ 03標準では、キーワードなしで文字列リテラルを宣言することは非推奨になりましたconst。これにより、文字列リテラルをポインタを介して変更できないようになります。


あなたの質問への回答編集は、@ Benjaminによってコメントですでに投稿されており、単に彼の回答を引用しています:

配列を使用します
。charmyString[]="このような文字列を宣言するのが好きです";
これにより、リテラルが配列にコピーされ、コピーを変更できます。

于 2011-10-23T17:32:52.290 に答える