質問: http://xn--n9q36mh1hnxuksz7wt.jp/fe21a-pm/t09.html この処理について教えてください。 if文の実行条件がどうしても分からないのです。 !strncmp(pp, "../", 3)はppの要素の先頭3文字と"../"の先頭3文字を比較して 一致しなかった場合にpp += 3;とwhile文を実行すると解釈しています。 つまり、ppの要素の先頭3文字が"../"だった場合は一致するのでif文は 実行されないと思うのですが、解説をみると逆になっています。 (ppの要素の先頭3文字が"../"だった場合は一致するのでif文は実行される。) http://www.kmctec.net/k_gogo/gogo11/gogoans1144.pdf if(!strncmp(pp, "../", 3))をどのように解釈すればいいのでしょうか?
回答: 直感に反するかもしれませんが、strcmp関数は二つの文字列が等しい場合に「0」を返します。 http://www9.plala.or.jp/sgwr-t/lib/strcmp.html したがって、ppの要素の先頭3文字が"../"だった場合は一致するので if文は if( ! 0 )となり、実行されます。