Namespaces
Variants

std:: memcmp

From cppreference.net
Défini dans l'en-tête <cstring>
int memcmp ( const void * lhs, const void * rhs, std:: size_t count ) ;

Réinterprète les objets pointés par lhs et rhs comme des tableaux de unsigned char et compare les premiers count octets de ces tableaux. La comparaison est effectuée de manière lexicographique.

Le signe du résultat est le signe de la différence entre les valeurs de la première paire d'octets (tous deux interprétés comme unsigned char ) qui diffèrent dans les objets comparés.

Table des matières

Paramètres

lhs, rhs - pointeurs vers les tampons de mémoire à comparer
count - nombre d'octets à examiner

Valeur de retour

Valeur négative si le premier octet différent (réinterprété en tant que unsigned char ) dans lhs est inférieur à l'octet correspondant dans rhs .

0 si tous les count octets de lhs et rhs sont égaux.

Valeur positive si le premier octet différent dans lhs est supérieur à l'octet correspondant dans rhs .

Notes

Cette fonction lit les représentations d'objets , pas les valeurs des objets, et n'est généralement significative que pour les objets trivialement copiables sans remplissage. Par exemple, memcmp() entre deux objets de type std::string ou std::vector ne comparera pas leur contenu, memcmp() entre deux objets de type struct { char c ; int n ; } comparera les octets de remplissage dont les valeurs peuvent différer lorsque les valeurs de c et n sont identiques, et même s'il n'y avait pas d'octets de remplissage, le int serait comparé sans tenir compte de l'endianité.

Exemple

#include <cstring>
#include <iostream>
void demo(const char* lhs, const char* rhs, std::size_t sz)
{
    std::cout << std::string(lhs, sz);
    const int rc = std::memcmp(lhs, rhs, sz);
    if (rc < 0)
        std::cout << " precedes ";
    else if (rc > 0)
        std::cout << " follows ";
    else
        std::cout << " compares equal to ";
    std::cout << std::string(rhs, sz) << " in lexicographical order\n";
}
int main()
{
    char a1[] = {'a', 'b', 'c'};
    char a2[sizeof a1] = {'a', 'b', 'd'};
    demo(a1, a2, sizeof a1);
    demo(a2, a1, sizeof a1);
    demo(a1, a1, sizeof a1);
}

Sortie :

abc precedes abd in lexicographical order
abd follows abc in lexicographical order
abc compares equal to abc in lexicographical order

Voir aussi

compare deux chaînes de caractères
(fonction)
compare un certain nombre de caractères de deux chaînes
(fonction)
Documentation C pour memcmp