strcmpを使った条件分岐

2つの文字列をstrcmpを使って比較し、同じ文字列なら中の処理をするというコードを書くとこうなります

if(!strcmp(str1, str2)) {
    hoge
}

なぜstrcmpの前に!をつけなければいけないのかをこの記事では書いていこうと思います。

strcmpは2つの文字列を比べ

  • str1 == str2 なら0
  • str1 > str2 なら1
  • str1 < str2 なら-1

を返す関数です
ここで大事なのが同じ場合に0を返すというところです。
if文ではFalseは0, Trueは1で判断しているのでstrcmpで同じ文字列だった場合0が返ってきて判定はFalseになります。

str1とstr2が同じ文字列だった場合のイメージは

if(0) {
    hoge
}

こういった感じです

!strcmpとすることで!は否定なので
同じ場合はTrue
違う場合はFalse
を返してくれるようになります
一応if(-1)でもTrue判定になるようなので、str1 < str2 でもFalseを返してくれます。


strcmpを使った条件分岐ではTrueとFalseがわかりづらいということを記事にしてみました。
矛盾していた点や理解の仕方がおかしな部分などありましたら、ご指摘ください