-1

重複の可能性:
なぜ char* は未定義の動作を引き起こすのに、char[] はそうしないのですか?

次のコード

int main() {
  char * st = "abc";
  *st = 'z';
  return 0;
}

セグメンテーション違反を返しています。スタック上の文字列が変更できない場合、コンパイル時にエラーが発生しないのはなぜですか?

4

2 に答える 2

2

スタック上の変数 st はポインタです。割り当てられる値は文字列定数 (読み取り専用) です。

于 2012-12-23T23:45:37.527 に答える
1

char *str = "this is dangerous to modify";あなたが得るのと同じ意味の文字列ではありません。これは文字列リテラルと呼ばれ、変更すると、標準に従って未定義の動作が発生します。

後で変更できる文字列が必要な場合は、次のようにします。

char str[] = "Some String";

それに応じて変更します。

于 2012-12-23T23:48:22.643 に答える