0

これは私のプログラムであり、s [0] =s[1]を実行しようとするとセグメント障害が発生します。私がしているのはs[1]に値を取り、それをs [0]に入れることだけなので、なぜこれが機能しないのかわかりません。

#include<stdio.h>

void main() {
  char x;
  char *s="stackoverflow";

  s[0] = s[1];  // it is segfaulting here 
  x = s[0];  //this works though 
  printf("this is: %s\n",s);
}

gcc filename.cを使用してコンパイルし、ubuntuターミナルで./a.outを使用して実行しています。

ありがとうございました。

4

3 に答える 3

2

するとchar *s="stackoverflow";s はコード部分にあるメモリを指すポインタになるため、変更できません。read-onlyであるため、実行時にセグメンテーション違反が発生します (constキーワードを使用した場合、コンパイル エラーが発生します。これはより良い方法です..したがってconst、文字列に変更を加えたくない場合に使用することをお勧めします) 。 .

その場合char s[]="stackoverflow";s はスタック上にある文字の配列であるため、変更できます。

于 2013-03-13T18:03:35.487 に答える
1

文字列リテラルを変更しようとしないでください。値を変更する場合は、たとえばを使用strcpyしてコピーを作成します。

于 2013-03-13T18:04:05.137 に答える
1

変数の宣言を変更:

char s[] = "stackoverflow";

variable は、スコープに入るとストレージが割り当てられ、指定されたデータで初期化されるため、問題を解決します。

于 2013-03-13T18:09:50.510 に答える