文字列の初期化について
実は、
void foo() {
char sampleA[] = "AAAAA";
char * sampleB = "BBBBB";
}
は、大きく違います。
- sampleA は、局所変数の配列で、中身は、"AAAAA" に初期化されます。
- sampleB は、局所変数ですがポインタです。
データ "BBBBB" 自体は、データセグメントといわれる大域変数のようなところに確保され、そこを指しています。
ですから、
- sampleA++ とかやると怒られます。
- sampleB[0] = 'X' とやると、良い OS では怒られます。
もし怒られなくても、他の "BBBBB" だったところまで
XBBBB に書き変わってしまったりします。
注意しましょう。
2002.10.14/
Tomio KAMADA: kamada@cs.kobe-u.ac.jp