web-dev-qa-db-ja.com

strcmp()はCで値を返します

私はCでstrcmp()について学んでいます。2つの文字列が等しい場合、strcmpは0を返します。

ただし、最初の文字列が2番目の文字列よりも小さいときにstrcmpが0未満を返すとマニュアルページに記載されている場合、長さ、ASCII値、または他の何か) ?

21
dmubu

この意味で、文字列の「より小さい」とは、辞書式(アルファベット順)の順序を意味します。

catはアルファベット順でdogの前にあるため、catdogよりも小さくなります。

辞書の順序は、ある意味では、アルファベット順をすべてのASCII(およびUNICODE)文字に拡張したものです。

26
Mysticial

ゼロより大きい値は、最初の文字列で一致しない最初の文字の値が2番目の文字列よりも大きいことを示し、ゼロより小さい値はその反対を示しま​​す。

8
JRL

C99 7.21.4:

比較関数によって返されるゼロ以外の値の符号memcmpstrcmp、およびstrncmpは、比較されるオブジェクトで異なる文字の最初のペア(両方ともunsigned charと解釈される)の値の差の符号によって決定されます。

特に、結果は現在のロケールに依存しないことに注意してください。 _LC_COLLATE_(C99 7.11を参照)はstrcoll()およびstrxfrm()に影響しますが、strcmp()には影響しません。

6
Keith Thompson
    int strcmp (const char * s1, const char * s2)
    {
        for(; *s1 == *s2; ++s1, ++s2)
           if(*s1 == 0)
               return 0;
        return *(unsigned char *)s1 < *(unsigned char *)s2 ? -1 : 1;
    }
2
Rani