Shammer's Philosophy

My private adversaria

C 言語の文字列比較

strcmp という関数が用意されている。String compare の略だろうか。文字列引数を2つとり、その2つが同じだったら 0 を、異なる場合には 0 以外の値を返す。

#include <stdio.h>
#include <string.h>

int main(int argc, char *args[]){
    if ( argc == 3 ) {
	int result = strcmp(args[1], args[2]);
	printf("result is %d.\n", result);
	if( result ){
	    printf("%s and %s are not equals.\n", args[1], args[2]);
	}
	else {
	    printf("%s and %s are equals.\n", args[1], args[2]);
	}
    }
    else {
	printf("Usage: %s $1\n", args[0]);
    }
    return 0;
}

以下、実行例。

$ gcc strcmpsample.c 
$ ./a.out aaa aaa
result is 0.
aaa and aaa are equals.
$ ./a.out aaa bbb
result is -1.
aaa and bbb are not equals.
$ ./a.out aaa AAA
result is 32.
aaa and AAA are not equals.
$

大文字小文字は区別されるようだ。感覚的には、同じだった場合に正(true)扱いしてほしいと思うが、正常終了の場合は 0 が返るという仕様に従っているのか、同じだった場合に 0 が返るために false 扱いとなってしまう。この点、ちょっと使いにくい気がする。