UNIX/Linuxの部屋 関数:strcmp

TOP UNIX/Linuxの部屋 UNIX/Linuxコマンド一覧 用語集 新版 由来/読み方辞書 環境変数マニュアル Cシェル変数 システム設定ファイル システムコール・ライブラリ ネットワークプログラミングの基礎知識 クラウドサービス徹底比較・徹底解説




関数 strcmp 文字列を比較する。 このエントリーをはてなブックマークに追加

#include <string.h>
char str1[]="abc";
char str2[]="def";
if ( strcmp(str1, str2) == 0 ){
str1とstr2は同じ文字列
} else {
str1とstr2は異なる文字列
}
文字列が一致すると strcmp が 0 を返すことに注意。
if ( strcmp(str1,str2) ){
文字列が一致
}
ではない。

なぜこういう変な仕様かというと、
  • str1 が str2 より (文字コードで比較して) 大きかったら正数を返す
  • str1 が str2 より (文字コードで比較して) 小さかったら負数を返す
  • str1 と str2 が同じなら 0 を返す
と、どちらが大きいかという情報を受け取れるようになっているからである。

よく
if ( ! strcmp(str1, str2) )
if ( strcmp(str1, str2) == 0 )
どちらの書き方がよいかで議論になるが、当ページ管理人は後者を推奨する (前者の書き方も既に慣用句として認められているとは思うが)。「str1 と str2 の差がゼロである」と覚えよう。