[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[debian-users:15970] Re: Question about C
> kohda> envja = getenv("LANG");
> kohda> if (strcmp(envja, "ja_JP.ujis") == 0)
> kohda>
> kohda> は効くのに
> kohda>
> kohda> if ( envja == "ja_JP.ujis" )
> kohda>
> kohda> だと効いてないようなんですが何故でしょう。
>
> たとえば int の配列同士を == 演算子で比較できるでしょうか?
> Cで文字列はcharの配列で表現しています。
えーと、この説明だと意味不明なんじゃないかな。
strcmp(envja, "ja_JP.ujis")は、envjaが指している文字列の中身
と、"ja_JP.ujis"という文字列定数の中身を比較しています。
envja == "ja_JP.ujis"は、envjaが保持しているアドレスと、
"ja_JP.ujis"という文字配列の先頭番地が等しいかどうか、すなわ
ち、まったく同じオブジェクトかどうかを調べています。
例えば、
char a[] = {"abc"}, *p = a;
char b[] = {"abc"}, *q = b;
と定義した場合、pの指している文字列とqの指している文字列の中
身は一致しますから、strcmp(p, q) == 0です。
一方、pとqは違う値を持ちますから、p != qです。
Lisp風に言うと、strcmp(p, q)はpとqがequalかどうかを調べてい
て、p == qはpとqがeqかどうかを調べています。eqならばequalで
すが、その逆は真ではありません。
--
川村 尚生