1. ホーム
  2. c

[解決済み] char s[]とchar *sの違いは何ですか?

2022-03-18 07:46:07

質問

C言語では、次のような宣言で文字列リテラルを使用することができます。

char s[] = "hello";

とか、こんな感じです。

char *s = "hello";

では、その違いは何なのでしょうか?コンパイル時と実行時の両方で、ストレージの持続時間について実際に何が起こっているのか知りたいのです。

どのように解決するのか?

ここでの違いは

char *s = "Hello world";

を配置します。 "Hello world" の中に メモリの読み取り専用部分 とし s へのポインタは、このメモリへの書き込み操作を違法とします。

しながら。

char s[] = "Hello world";

は、リテラル文字列を読み取り専用メモリに置き、その文字列をスタック上の新しく割り当てられたメモリにコピーします。このように

s[0] = 'J';

を合法化します。