私はこのようなstrcpy
をしようとしていた。明確化()*編曲
int main()
{
char *c="hello";
const char *d="mello";
strcpy(c,d);
cout<<c<<endl;
return 0;
}
これは警告を与え、コードを実行するとセグメンテーションフォールトを生成コンパイル。
警告がある:
警告:「のchar *」に定数文字列から非推奨の変換[-Wwrite-ストリング]
CHAR * C = "こんにちは";
strcpy
の宣言は次のとおりです。char * strcpy (char * destination, const char * source);
だから私は(警告に関する)間違っていますか? IMO
const char
とchar
を関数の宣言と同じものを使用しています。c*
またはd*
は、それがセグメンテーションフォールトをスローしているため、 に、"hello"
と"mello"
を保持するためのメモリを割り当てませんか?c*
のような変数の初期化/定義はどのように機能しますか?
'char * c =" hello ";'はもはやC++では合法ではありません。 – drescherjm
私はあなたの問題解決を理解していません。警告は 'char * c =" hello ";'を指していますが、あなたは 'strcpy'を正しく呼び出していると主張しています。コンパイラはその部分についても不平を言っていません。 – Rakete1111
*** c *のような変数の初期化/定義はどうしますか?***多くのコンパイラは、文字列リテラルをメモリの変更不可能な領域(OSやhwで保護されています)に配置します。 – drescherjm