したがって、コンパイラは、これが文字列リテラルから char* への非推奨の変換であると教えてくれます。
char* myString = "i like declaring strings like this";
これについて心配する必要がありますか?これは間違った方法ですか?
myString
を受け入れる関数に渡す必要があります。この変換なしchar*
で を適切に初期化する必要があるのは誰ですか?char*
したがって、コンパイラは、これが文字列リテラルから char* への非推奨の変換であると教えてくれます。
char* myString = "i like declaring strings like this";
これについて心配する必要がありますか?これは間違った方法ですか?
myString
を受け入れる関数に渡す必要があります。この変換なしchar*
で を適切に初期化する必要があるのは誰ですか?char*
はい、あなたはそれについて心配する必要があります!
次のように宣言する必要があります。
const char* myString = "i like declaring strings like this";
mystring
は文字列リテラルへのポインタ"i like declaring strings like this"
であり、文字列リテラルはメモリ空間(実装定義)に存在しますが、プログラムで変更しないでください。
文字列リテラルを変更すると、未定義の動作が発生します。
したがって、C ++ 03標準では、キーワードなしで文字列リテラルを宣言することは非推奨になりましたconst
。これにより、文字列リテラルをポインタを介して変更できないようになります。
あなたの質問への回答編集は、@ Benjaminによってコメントですでに投稿されており、単に彼の回答を引用しています:
配列を使用します
。charmyString[]="このような文字列を宣言するのが好きです";
これにより、リテラルが配列にコピーされ、コピーを変更できます。