[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[debian-users:15966] Re: Question about C
From: Atsuhito Kohda <kohda@xxxxxxxxxxxxxxxxxxxx>
Subject: [debian-users:15963] Question about C
Date: Thu, 10 Jun 1999 17:31:31 +0900
Message-ID: <19990610173347G.kohda@xxxxxxxxxxxxxxxxxxxx>
kohda> 香田@徳島大です。ちょっと恥かしいですが、
kohda>
kohda> 一応 Debian 絡みで少し必要があって C のド素人
kohda> ですが質問です。
kohda>
kohda> envja = getenv("LANG");
kohda> if (strcmp(envja, "ja_JP.ujis") == 0)
kohda>
kohda> は効くのに
kohda>
kohda> if ( envja == "ja_JP.ujis" )
kohda>
kohda> だと効いてないようなんですが何故でしょう。
kohda>
本田です。
Cは非常にアセンブラよりの言語なのであまり高度なことはしてくれません。
それで、
kohda> envja = getenv("LANG");
envjaにはポインタが入りますよね。char *で宣言されているはずです。
kohda> if (strcmp(envja, "ja_JP.ujis") == 0)
それで関数strcmpは引数が文字列へのポインタですから以上でOK
そして戻り値を判別することで、比較結果を得ることができます。
kohda> if ( envja == "ja_JP.ujis" )
そして、これではポインタどうしを比較することになります。
つまり ”で囲まれた文字列はstaticな領域に確保された
文字列へのポインタとなり、文字列へのポインタenvjaと比較され
るので、文字列どうしが一致しているかどうかのチェックには
使えません。
kohda> また case 文の後に長い文が来るとき改行はできる
kohda> のでしょうか、具体的には
kohda>
kohda> case 'J' : 長〜い if 文 break;
kohda>
もちろんCではどんどん改行を入れてください。
switch( answer ) {
case 'J':
if( debian == 1 &&
redhat == 1 &&
slackware ==1 ) {
puts("Linux ??");
}
break;
case 'A':
if(microsoft == 1 && visual-basic ==1 &&
visual-studio == 1 && access == 1 ) {
puts("Oh my god!");
}
default
break;
}
kohda> のような場合です。sh の case と混同してる気は
kohda> 自分でもしてます(^^;
kohda>
shとは違います。(ってshはあんまり知らない(^^;)
kohda> 一応目的は達っしてるのですが見た目を良くしたい
kohda> ので。
kohda>
kohda> # 何にも調べてません。ご容赦ください。
kohda>
kohda> 平成11年6月10日(木)
kohda> --
kohda> ***************************
kohda> 香田 温人(こうだ あつひと)
kohda> http://www1.pm.tokushima-u.ac.jp/%7Ekohda/
kohda>
____ラ・ベル・エポック株式会社 インターネット ソリューション______
/ 〒814-0151 福岡県福岡市城南区堤 1-11-22 第2堤ハイツ105号 /|
/ 本田 耕一 mailto:honda@xxxxxxxxx TEL/FAX:092-872-6997 //
/|/|/|/|/|/|/|/|/|/|/|/|/|/|/|/|/|/|/|/|/|/|/|/|/|/|/|/|/|/|/|/|/|/|//
Key fingerprint = C1 EF 59 05 2B 57 90 B9 B8 9B 4C 12 73 34 A3 F2 /
Key server : http://pgp.nic.ad.jp/
pub 1024/A56F4029 1999/02/16 Koichi Honda <honda@xxxxxxxxx>