strchr()の戻り値は、真(true)/偽(false)じゃないぞと

これは、こんなif文書くのがそもそもの間違いだよなぁ*1
strchr()は検索文字が見つからない場合はnullを返すのだから
きちんと「strchr("+-*/", c) != null」と書きましょう

以下のコードを見てみます。

if (strchr("+-*/", c)) { // c は四則演算の記号かな?
...
}

この if 文は c が + - * / のいずれかの場合に条件が真となり、ブロック中が実行されます。…と、思いきや、実は条件が真になるケースがもうひとつありました。c が '\0' の場合です。

*1:K&R Cの頃に書かれたソースではよく見たがANSI C移行では見なくなった間違いだねぇ