| ホーム >> | プログラミング >> | C言語 |
参考:STACK*
strcmp(const char *str1, const char *str2) strcoll(const char *str1, const char *str2)
どちらも文字列を比較する関数だが、返り値に注意する。 2つの文字列が等しい時には 0 を返す。 文字列が異なる場合は文字コードの大小によって、正負の値を返す。
if文を使って分岐する時には注意する。等しい時には 0 を返すので、
if(strcmp(str1, str2)) {...}
では正しく働かない。次のようにしなければならない。
if(strcmp(str1, str2)==0){...}
printf("TRUE = %d?n",(1==1));
printf("FALSE = %d?n",(1==0));
を実行してみると、
TRUE = 1 FALSE = 0となる。一般的にはTRUEは1とは限らず、
0=FALSE 0!=TRUEのようだ。
-1=TRUE
としている言語もあるらしい。
#include<stdio.h>
#include<unistd.h>
extern char *optarg;
int main(int argc, char *argv[]){
int opt;
while((opt=getopt(argc,argv,"ab:c"))!=-1){
switch(opt){
case 'a': printf("Option %c.エn",opt); break;
case 'b': printf("Option %c with arg %s.エn",opt,optarg);
break;
case 'c': printf("Option %c.エn",opt); break;
default: printf("Unknown option '%c'エn", opt);
}
optarg=NULL;
}
return 0;
}
int *p;と
int* p;は同じ。変数の定義を
型 変数名;のように統一するならば
int* p;と書いた方が分かりやすい。