重複の可能性:
セグメンテーション違反の取得
このコードでセグメンテーション違反が発生するのはなぜですか?
char *text = "foo";
strcpy(text, "");
私が理解している限り、最初の行は(文字列「foo」を保持するために)text
メモリを割り当て、その割り当てられたメモリを指しています。2 行目は、空の文字列を がtext
指す場所にコピーします。
このコードはあまり意味がないかもしれませんが、なぜ失敗するのでしょうか?
重複の可能性:
セグメンテーション違反の取得
このコードでセグメンテーション違反が発生するのはなぜですか?
char *text = "foo";
strcpy(text, "");
私が理解している限り、最初の行は(文字列「foo」を保持するために)text
メモリを割り当て、その割り当てられたメモリを指しています。2 行目は、空の文字列を がtext
指す場所にコピーします。
このコードはあまり意味がないかもしれませんが、なぜ失敗するのでしょうか?
文字列リテラル (この場合は "foo") がある場合は常に、プログラムはその値をメモリの読み取り専用セクションに格納します。
strcpy
その値を変更したいのですが、読み取り専用であるため、セグメンテーション違反が発生します。
また、ではなく であるtext
必要があります。const char*
char*
文字列リテラル ( など"foo"
) はread-only であるためです。
文字列リテラルはメモリの読み取り専用領域に格納されるためです。
したがって、 (この場合はfoo
using を使用して) を変更しようとすると、未定義の動作になります。strcpy