Namespaces
Variants

memcmp

From cppreference.net
< c ‎ | string ‎ | byte
Definido en el encabezado <string.h>
int memcmp ( const void * lhs, const void * rhs, size_t count ) ;

Compara los primeros count bytes de los objetos apuntados por lhs y rhs . La comparación se realiza lexicográficamente.

El signo del resultado es el signo de la diferencia entre los valores del primer par de bytes (ambos interpretados como unsigned char ) que difieren en los objetos que se están comparando.

El comportamiento es indefinido si el acceso ocurre más allá del final de cualquiera de los objetos apuntados por lhs y rhs . El comportamiento es indefinido si cualquiera de los punteros lhs o rhs es un puntero nulo.

Contenidos

Parámetros

lhs, rhs - punteros a los objetos a comparar
count - número de bytes a examinar

Valor de retorno

Valor negativo si lhs aparece antes que rhs en orden lexicográfico.

Cero si lhs y rhs son iguales, o si count es cero.

Valor positivo si lhs aparece después de rhs en orden lexicográfico.

Notas

Esta función lee representaciones de objetos , no los valores de los objetos, y típicamente solo tiene sentido para arreglos de bytes: las estructuras pueden tener bytes de relleno cuyos valores son indeterminados, los valores de cualquier byte más allá del último miembro almacenado en una unión son indeterminados, y un tipo puede tener dos o más representaciones para el mismo valor (diferentes codificaciones para + 0 y - 0 o para + 0.0 y 0.0 , bits de relleno indeterminados dentro del tipo).

Ejemplo

#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);
}

Salida:

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

Referencias

  • Estándar C23 (ISO/IEC 9899:2024):
  • 7.24.4.1 La función memcmp (p: TBD)
  • Estándar C17 (ISO/IEC 9899:2018):
  • 7.24.4.1 La función memcmp (p: 266)
  • Estándar C11 (ISO/IEC 9899:2011):
  • 7.24.4.1 La función memcmp (p: 365)
  • Estándar C99 (ISO/IEC 9899:1999):
  • 7.21.4.1 La función memcmp (p: 328)
  • Estándar C89/C90 (ISO/IEC 9899:1990):
  • 4.11.4.1 La función memcmp

Véase también

compara dos cadenas
(función)
compara una cantidad determinada de caracteres de dos cadenas
(función)