Fonction memcmp

Entête à inclure

#include <string.h>  // <cstring> en C++

Fonction memcmp

int memcmp( const void * pointer1, const void * pointer2, size_t size );

Cette fonction permet de comparer le contenu de deux blocs de mémoire spécifiés par les deux premiers paramètres de la fonction. Le troisième paramètre, size, permet de spécifier le nombre d'octets sur lequel comparer les deux blocs. Les octets des deux blocs sont comparés deux à deux. Tant que les deux octets comparés sont égaux, la fonction passe aux deux suivants. Si les deux octets comparés sont différents, alors la fonction renvérra lequel des deux blocs est le plus petit en termes de contenu.

Attention, contrairement à strcpy, aucun test sur une éventuelle valeur nulle n'est réalisé pour stopper la comparaison. Seule la taille du bloc sera considérée.

Paramètres

  • pointer1 : permet de spécifier l'adresse du premier bloc mémoire à comparer.
  • pointer2 : permet de spécifier l'adresse du second bloc mémoire à comparer.
  • size : indique le nombre d'octets maximal à comparer.

Valeur de retour

Trois cas sont possibles en termes de valeur de retour. Soit la valeur de retour est négative : dans ce cas, le premier octet qui différe entre les deux blocs est plus petit dans le premier bloc. Soit la valeur de retour est nulle : dans ce cas, les deux blocs ont leurs contenus strictement identique. Enfin, si la valeur de retour est positive : dans ce cas, le premier octet qui différe entre les deux blocs est plus grand dans le premier bloc.

Exemple de code

#include <assert.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

/* My memcmp implementation */
int mymemcmp( const void * pointer1, const void * pointer2, size_t size ) {
    unsigned long position;
    for( position=0; position<size; ++position ) {
        int delta = *(unsigned char *)pointer1++ - *(unsigned char *)pointer2++;
        if ( delta ) return delta;
    }
    return 0;
}

int main() {

    int array1 [] = { 54, 85, 20, 63, 21 };
    int array2 [] = { 54, 85, 19, 63, 21 };
    size_t size = sizeof( int ) * 5;

    assert( memcmp( array1, array2, size) == mymemcmp( array1, array2, size) );       
    assert( memcmp( array1, array1, size) == mymemcmp( array1, array1, size) );       
    assert( memcmp( array2, array1, size) == mymemcmp( array2, array1, size) );       
    
    printf( "Test is ok\n" );
    
    return 0;
}

Sujets connexes

memcpy
memset