Namespaces
Variants

memcmp

From cppreference.net
< c ‎ | string ‎ | byte
Definiert in Header <string.h>
int memcmp ( const void * lhs, const void * rhs, size_t count ) ;

Vergleicht die ersten count Bytes der Objekte, auf die lhs und rhs zeigen. Der Vergleich erfolgt lexikografisch.

Das Vorzeichen des Ergebnisses ist das Vorzeichen der Differenz zwischen den Werten des ersten Bytepaares (beide interpretiert als unsigned char ), die sich in den verglichenen Objekten unterscheiden.

Das Verhalten ist undefiniert, wenn der Zugriff über das Ende eines der Objekte hinaus erfolgt, auf die lhs und rhs zeigen. Das Verhalten ist undefiniert, wenn entweder lhs oder rhs ein Nullzeiger ist.

Inhaltsverzeichnis

Parameter

lhs, rhs - Zeiger auf die zu vergleichenden Objekte
count - Anzahl der zu prüfenden Bytes

Rückgabewert

Negativer Wert, wenn lhs vor rhs in lexikographischer Reihenfolge erscheint.

Null, wenn lhs und rhs gleich sind, oder wenn count null ist.

Positiver Wert, wenn lhs nach rhs in lexikografischer Reihenfolge erscheint.

Hinweise

Diese Funktion liest Objektrepräsentationen , nicht die Objektwerte, und ist typischerweise nur für Byte-Arrays sinnvoll: Strukturen können Padding-Bytes mit undefinierten Werten enthalten, die Werte von Bytes hinter dem letzten gespeicherten Member in einer Union sind undefiniert, und ein Typ kann zwei oder mehr Repräsentationen für denselben Wert haben (verschiedene Kodierungen für + 0 und - 0 oder für + 0.0 und 0.0 , undefinierte Padding-Bits innerhalb des Typs).

Beispiel

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

Ausgabe:

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

Referenzen

  • C23-Standard (ISO/IEC 9899:2024):
  • 7.24.4.1 Die memcmp-Funktion (S.: TBD)
  • C17-Standard (ISO/IEC 9899:2018):
  • 7.24.4.1 Die memcmp-Funktion (S. 266)
  • C11-Standard (ISO/IEC 9899:2011):
  • 7.24.4.1 Die memcmp-Funktion (S: 365)
  • C99-Standard (ISO/IEC 9899:1999):
  • 7.21.4.1 Die memcmp-Funktion (S: 328)
  • C89/C90-Standard (ISO/IEC 9899:1990):
  • 4.11.4.1 Die memcmp-Funktion

Siehe auch

vergleicht zwei Zeichenketten
(Funktion)
vergleicht eine bestimmte Anzahl von Zeichen zweier Zeichenketten
(Funktion)