Namensräume
Varianten
Aktionen

memcmp

Von cppreference.com
< 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 lexikographisch.

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

Das Verhalten ist undefiniert, wenn ein Zugriff über das Ende eines der von lhs und rhs gezeigten Objekte erfolgt. Das Verhalten ist undefiniert, wenn lhs oder rhs ein Nullzeiger ist.

Inhalt

[bearbeiten] Parameter

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

[bearbeiten] Rückgabewert

Negativer Wert, wenn lhs lexikographisch vor rhs kommt.

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

Positiver Wert, wenn lhs lexikographisch nach rhs kommt.

[bearbeiten] Hinweise

Diese Funktion liest Objektdarstellungen, nicht die Objektwerte, und ist typischerweise nur für Byte-Arrays sinnvoll: Strukturen können Padding-Bytes enthalten, deren Werte unbestimmt sind, die Werte von Bytes jenseits des letzten gespeicherten Elements in einer Union sind unbestimmt, und ein Typ kann zwei oder mehr Darstellungen für denselben Wert haben (unterschiedliche Kodierungen für +0 und -0 oder für +0.0 und 0.0, unbestimmte Padding-Bits innerhalb des Typs).

[bearbeiten] 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

[bearbeiten] Referenzen

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

[bearbeiten] Siehe auch

vergleicht zwei Strings
(Funktion) [bearbeiten]
vergleicht eine bestimmte Anzahl von Zeichen zweier Strings
(Funktion) [bearbeiten]
C++ Dokumentation für memcmp