#include <string.h> // <cstring> en C++
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.
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.
#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; }
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 :