Participer au site avec un Tip
Rechercher
 

Améliorations / Corrections

Vous avez des améliorations (ou des corrections) à proposer pour ce document : je vous remerçie par avance de m'en faire part, cela m'aide à améliorer le site.

Emplacement :

Description des améliorations :

Fonction memcmp

La fonction memchr La fonction memcpy


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

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

memchr
memcpy
memset


La fonction memchr La fonction memcpy