理工系研究者のための Mac OS X, Windows, Linux メモ
 
ホーム >> プログラミング >> C言語

C言語の情報

  1. 文字列の比較・・・strcmp(str1, str2), strcoll(str1, str2)
  2. TRUEとFALSE
  3. 引数の処理・・・getopt()関数
  4. 「int *p」と「int* p」

文字列の比較・・・strcmp(str1, str2), strcoll(str1, str2)

参考: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){...}

TRUE と FALSE

printf("TRUE = %d?n",(1==1));
printf("FALSE = %d?n",(1==0));
を実行してみると、
TRUE = 1
FALSE = 0
となる。一般的にはTRUEは1とは限らず、
0=FALSE
0!=TRUE
のようだ。

-1=TRUE

としている言語もあるらしい。

引数の処理・・・getopt()関数

#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'

更新日:2003/11/2
int *p;
int* p;
は同じ。変数の定義を
型 変数名;
のように統一するならば
int* p;
と書いた方が分かりやすい。