>>129
うーん、>>127の後半に書いた通りなんだけど、
書き換えができないというのは分かりやすいからいいよね?

後は、「同じ文字列」のとらえ方によって結果が違ってくるってこと。
char *a = "abc";
char *b = a;
この場合、aとbの文字列の内容は同じだし実体も同じ。
if (strcmp(a, b) == 0) { ... } も
if (a == b) { ... } も成り立つわけ。で、
char a[] = "abc";
char b[] = "abc";
これは、aとbの文字列の内容は同じ、だけど実体は別。
if (strcmp(a, b) == 0) { ... } は成立、
if (a == b) { ... } は不成立。だけど、
char *a = "abc";
char *b = "abc";
これは? 文字列の内容はもちろん同じ。
if (strcmp(a, b) == 0) { ... } は成立。でも、
if (a == b) { ... } は?
どちらになるかは不定なので、どちらかを期待してプログラミングしちゃいけない。

こんな感じで、文字列の場合、
・見かけが同じ
・実体が同じ
の二つの「同じ」があって、なおかつ文字列定数の場合は後者の「同じ」が
定義されない場合があるので、自分が期待している「同じ」が何なのかをちゃんと
考えてプログラミングしないとハマるわけ。

てな説明で分かってもらえますか?