1

重複の可能性:
文字列への書き込み時にセグメンテーション違反が発生するのはなぜですか?

文字列内の単語を置き換えたい。ここにコードがあります

char text[] = "This is a list of lists";
char *find = "list";
char* pos = NULL;
pos = strstr(text,find);
strncpy(pos,"test",4)

これはうまくいきますが、

char *text = "This is a list of lists";
char *find = "list";
char* pos = NULL;
pos = strstr(text,find);
strncpy(pos,"test",4)

これにより、セグメンテーション違反が発生します。

最初の例では、「テキスト」は配列であり、データはその場所にコピーされます。2番目の「テキスト」はポインターです。問題とは何ですか?

4

2 に答える 2

3

の違い

char text[] = "This is a list of lists"; // 1

char *text = "This is a list of lists"; // 2

(1)では、文字text非定数配列です。(2) と同様にtext、 は文字列リテラルを指し、文字列リテラルは定数です。(2)で試している定数オブジェクトを変更することはできません。(2)で実際に未定義の動作で行っていること。

于 2012-09-14T05:49:39.240 に答える
1

問題は、2 番目の例の文字列が文字列リテラルであり、一定でなければならないことです。その文字列に書き込もうとすると、(オペレーティング システムによっては) 許可されていない読み取り専用メモリに書き込むことになります。

于 2012-09-14T05:48:11.627 に答える