1

重複の可能性:
セグメンテーション違反の取得

このコードでセグメンテーション違反が発生するのはなぜですか?

char *text = "foo";
strcpy(text, "");

私が理解している限り、最初の行は(文字列「foo」を保持するために)textメモリを割り当て、その割り当てられたメモリを指しています。2 行目は、空の文字列を がtext指す場所にコピーします。

このコードはあまり意味がないかもしれませんが、なぜ失敗するのでしょうか?

4

3 に答える 3

6

文字列リテラル (この場合は "foo") がある場合は常に、プログラムはその値をメモリの読み取り専用セクションに格納します。

strcpyその値を変更したいのですが、読み取り専用であるため、セグメンテーション違反が発生します。

また、ではなく であるtext必要があります。const char*char*

于 2011-09-22T01:23:38.167 に答える
0

文字列リテラル ( など"foo") はread-only であるためです。

于 2011-09-22T01:24:00.837 に答える
0

文字列リテラルはメモリの読み取り専用領域に格納されるためです。

したがって、 (この場合はfoousing を使用して) を変更しようとすると、未定義の動作になります。strcpy

于 2011-09-22T01:26:39.590 に答える