0

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

私は単純な文字列関数を書いていました。問題は、char ポインターを宣言してから、特定の文字を更新しようとすると、プログラムがクラッシュすることです。

以前に記述された文字列処理を確認したところ、特定の文字が変更されていることがわかりました。しかし、それらを実行しようとすると、同じ問題が発生します。

サンプル:

   stringprocess()
{
 char *s;
 s=" I am c programmer";
 s=" but, ..... um";

 *s='x'; //program crashes here...

 *p="abc";
 *s=*p; // this also cause crashing
........
}  

なぜこれが起こるのですか?

4

1 に答える 1

4
s=" but, ..... um";

s文字列リテラルを指します。文字列リテラルを変更しようとすると、未定義の動作が発生します。多くの場合、文字列リテラルは読み取り専用メモリに保存され、そのような試みの直後にクラッシュが発生します。

char s[100]内容を変更する場合は、 (たとえば) またはmalloced ポインターを使用する必要があります。

于 2012-11-14T21:09:10.723 に答える