strcmpは文字列同士を比較し、どちらがASCIIコード順で先か後かを判定する・・・。
戻り値が負の値の場合は、第1引数の文字列が先、
戻り値が正の値の場合は、第2引数の文字列が先、
戻り値が0の場合は、2つの文字列は等しいと判定する・・・。
判定ロジックの詳細は、動かしながら説明していく・・・。
変数・配列の宣言・・・。
str2は"ABCDE"・・・。
これと入力文字列str1を比較する・・・。
strcmpの戻り値はcompare_resultに格納し、この値によって表示を切り替える・・・。
まず、str1を入力・・・。
strcmpで判定・・・。
compare_resultが負なら、str1 < str2、
compare_resultが正なら、str1 > str2、
どちらでもない場合は、str1 == str2、
というように判定される・・・。
実際にはどんな文字列がどう判定されるのか試してみよう・・・。
たとえば、
$ ./strcmp str1: B str1("B") > str2("ABCDE")
strcmpはそれぞれの文字を先頭から比較していく・・・。
この場合、0文字目をみると、str1[0] = 'B', str2[0] = 'A'なので、
str1のほうが大きいということになり、str2が先ということがわかる・・・。
$ ./strcmp str1: ABA str1("ABA") < str2("ABCDE") [bg1@dti-vps-srv93 strcmp]$
途中まで同じ場合は、違いがあったところを比較する・・・。
2文字目が、str1[2] = 'A', str2[2] = 'C'なので、
str2が大きい、つまりstr1が先・・・。
$ ./strcmp str1: ABCD str1("ABCD") < str2("ABCDE")
短い方の文字列すべてが一緒の場合、
この場合は、長い文字列が大きいとみなされる・・・。
str2が大きい、つまりstr1が先・・・。
$ ./strcmp str1: ABCDE str1("ABCDE") == str2("ABCDE")
全て一緒の場合は、等しいとみなされる・・・。
strcmpは、このようにして文字列同士の関係を表している・・・。