22

私はstrcmp()Cで学んでいます.2つの文字列が等しい場合、strcmp0を返すことを理解しています.

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

4

5 に答える 5

26

この意味で、文字列の「未満」は辞書順 (アルファベット順) を意味します。

Socatはより小さいdogのでcat、アルファベット順で の前dogです。

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

于 2011-10-05T03:48:13.927 に答える
8

0 より大きい値は、一致しない最初の文字が 2 番目の文字列よりも最初の文字列の方が大きいことを示し、0 より小さい値はその逆を示します。

于 2011-10-05T03:45:39.217 に答える
6

C99 7.21.4:

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

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

于 2011-10-05T03:58:19.963 に答える
2
    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;
    }
于 2012-11-22T11:56:49.443 に答える