C では、次のように宣言で文字列リテラルを使用できます。
char s[] = "hello";
または次のようになります:
char *s = "hello";
では、違いは何でしょうか? コンパイル時と実行時の両方で、ストレージ期間に関して実際に何が起こるのかを知りたいのです。
ベストアンサー1
ここでの違いは
char *s = "Hello world";
はメモリの読み取り専用部分"Hello world"
に配置され、それへのポインタを作成すると、このメモリへの書き込み操作はすべて不正になります。s
やっている間:
char s[] = "Hello world";
リテラル文字列を読み取り専用メモリに置き、その文字列をスタック上の新しく割り当てられたメモリにコピーします。
s[0] = 'J';
法律上の。