char s[]とchar *sの違いは何ですか?質問する

char s[]とchar *sの違いは何ですか?質問する

C では、次のように宣言で文字列リテラルを使用できます。

char s[] = "hello";

または次のようになります:

char *s = "hello";

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

ベストアンサー1

ここでの違いは

char *s = "Hello world";

はメモリの読み取り専用部分"Hello world"に配置され、それへのポインタを作成すると、このメモリへの書き込み操作はすべて不正になります。s

やっている間:

char s[] = "Hello world";

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

s[0] = 'J';

法律上の。

おすすめ記事