Namespaces
Variants

std:: memcmp

From cppreference.net
Definiert im Header <cstring>
int memcmp ( const void * lhs, const void * rhs, std:: size_t count ) ;

Interpretiert die Objekte, auf die lhs und rhs zeigen, als Arrays von unsigned char und vergleicht die ersten count Bytes dieser Arrays. Der Vergleich erfolgt lexikographisch.

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

Inhaltsverzeichnis

Parameter

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

Rückgabewert

Negativer Wert, wenn das erste abweichende Byte (interpretiert als unsigned char ) in lhs kleiner ist als das entsprechende Byte in rhs .

0 wenn alle count Bytes von lhs und rhs gleich sind.

Positiver Wert, wenn das erste abweichende Byte in lhs größer ist als das entsprechende Byte in rhs .

Hinweise

Diese Funktion liest Objektrepräsentationen , nicht die Objektwerte, und ist typischerweise nur für trivial-kopierbare Objekte ohne Padding sinnvoll. Zum Beispiel wird memcmp() zwischen zwei Objekten des Typs std::string oder std::vector nicht deren Inhalte vergleichen, memcmp() zwischen zwei Objekten des Typs struct { char c ; int n ; } wird die Padding-Bytes vergleichen, deren Werte sich unterscheiden können, wenn die Werte von c und n gleich sind, und selbst wenn es keine Padding-Bytes gäbe, würde der int ohne Berücksichtigung der Bytereihenfolge verglichen werden.

Beispiel

#include <cstring>
#include <iostream>
void demo(const char* lhs, const char* rhs, std::size_t sz)
{
    std::cout << std::string(lhs, sz);
    const int rc = std::memcmp(lhs, rhs, sz);
    if (rc < 0)
        std::cout << " geht vor ";
    else if (rc > 0)
        std::cout << " folgt auf ";
    else
        std::cout << " ist gleich mit ";
    std::cout << std::string(rhs, sz) << " in lexikographischer Reihenfolge\n";
}
int main()
{
    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 geht vor abd in lexikographischer Reihenfolge
abd folgt auf abc in lexikographischer Reihenfolge
abc ist gleich mit abc in lexikographischer Reihenfolge

Siehe auch

vergleicht zwei Zeichenketten
(Funktion)
vergleicht eine bestimmte Anzahl von Zeichen aus zwei Zeichenketten
(Funktion)
C-Dokumentation für memcmp