Namespaces
Variants

memcmp

From cppreference.net
< c ‎ | string ‎ | byte
Défini dans l'en-tête <string.h>
int memcmp ( const void * lhs, const void * rhs, size_t count ) ;

Compare les premiers count octets des objets pointés par lhs et rhs . 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.

Le comportement est indéfini si l'accès se produit au-delà de la fin de l'un ou l'autre objet pointé par lhs et rhs . Le comportement est indéfini si lhs ou rhs est un pointeur nul.

Table des matières

Paramètres

lhs, rhs - pointeurs vers les objets à comparer
count - nombre d'octets à examiner

Valeur de retour

Valeur négative si lhs apparaît avant rhs dans l'ordre lexicographique.

Zéro si lhs et rhs sont égaux, ou si count est zéro.

Valeur positive si lhs apparaît après rhs dans l'ordre lexicographique.

Notes

Cette fonction lit les représentations d'objets , pas les valeurs des objets, et n'est généralement significative que pour les tableaux d'octets : les structures peuvent avoir des octets de remplissage dont les valeurs sont indéterminées, les valeurs de tout octet au-delà du dernier membre stocké dans une union sont indéterminées, et un type peut avoir deux ou plusieurs représentations pour la même valeur (différents encodages pour + 0 et - 0 ou pour + 0.0 et 0.0 , bits de remplissage indéterminés au sein du type).

Exemple

#include <stdio.h>
#include <string.h>
void demo(const char* lhs, const char* rhs, size_t sz)
{
    for(size_t n = 0; n < sz; ++n)
        putchar(lhs[n]);
    int rc = memcmp(lhs, rhs, sz);
    const char *rel = rc < 0 ? " precedes " : rc > 0 ? " follows " : " compares equal ";
    fputs(rel, stdout);
    for(size_t n = 0; n < sz; ++n)
        putchar(rhs[n]);
    puts(" in lexicographical order");
}
int main(void)
{
    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

Références

  • Norme C23 (ISO/IEC 9899:2024):
  • 7.24.4.1 La fonction memcmp (p: TBD)
  • Norme C17 (ISO/CEI 9899:2018) :
  • 7.24.4.1 La fonction memcmp (p: 266)
  • Norme C11 (ISO/CEI 9899:2011):
  • 7.24.4.1 La fonction memcmp (p: 365)
  • Norme C99 (ISO/IEC 9899:1999) :
  • 7.21.4.1 La fonction memcmp (p: 328)
  • Norme C89/C90 (ISO/IEC 9899:1990) :
  • 4.11.4.1 La fonction memcmp

Voir aussi

compare deux chaînes de caractères
(fonction)
compare un certain nombre de caractères de deux chaînes
(fonction)