web-dev-qa-db-fra.com

strcmp () renvoie des valeurs en C

J'apprends strcmp() en C. Je comprends que lorsque deux chaînes sont égales, strcmp renvoie 0.

Cependant, lorsque les pages de manuel indiquent que strcmp renvoie moins de 0 lorsque la première chaîne est inférieure à la deuxième chaîne, fait-il référence à la longueur, ASCII valeurs, ou autre chose ?

21
dmubu

En ce sens, "moins de" pour les chaînes signifie l'ordre lexicographique (alphabétique).

Donc cat est inférieur à dog parce que cat est alphabétiquement avant dog.

L'ordre lexicographique est, dans un certain sens, une extension de l'ordre alphabétique à tous les caractères ASCII (et UNICODE).

26
Mysticial

Une valeur supérieure à zéro indique que le premier caractère qui ne correspond pas a une valeur supérieure dans la première chaîne que dans la seconde, et une valeur inférieure à zéro indique le contraire.

8
JRL

C99 7.21.4:

Le signe d'une valeur non nulle retournée par les fonctions de comparaison memcmp , strcmp , et strncmp est déterminé par le signe de la différence entre les valeurs de la première paire de caractères (toutes deux interprétées comme caractère non signé ) qui diffèrent par les objets comparés.

Notez en particulier que le résultat ne dépend pas des paramètres régionaux actuels; LC_COLLATE (Voir C99 7.11) affecte strcoll() et strxfrm(), mais pas 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