Namensräume
Varianten
Aktionen

std::memcmp

Von cppreference.com
< cpp‎ | string‎ | byte
 
 
 
 
Definiert in Header <cstring>
int memcmp( const void* lhs, const void* rhs, std::size_t count );

Reinterpretiert die Objekte, auf die von lhs und rhs gezeigt wird, 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 Paares von Bytes (beide als unsigned char interpretiert), die sich in den verglichenen Objekten unterscheiden.

Inhalt

[bearbeiten] Parameter

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

[bearbeiten] Rückgabewert

Negativer Wert, wenn das erste unterschiedliche Byte (als unsigned char reinterpretiert) 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 unterschiedliche Byte in lhs größer ist als das entsprechende Byte in rhs.

[bearbeiten] Hinweise

Diese Funktion liest Objektrepräsentationen, nicht die Objektwerte, und ist typischerweise nur für trivial kopierbare Objekte ohne Auffüllungsbytes sinnvoll. Zum Beispiel vergleichen memcmp() zwischen zwei Objekten vom Typ std::string oder std::vector nicht deren Inhalte. memcmp() zwischen zwei Objekten vom Typ struct { char c; int n; } vergleicht die Auffüllungsbytes, deren Werte unterschiedlich sein können, auch wenn die Werte von c und n gleich sind. Selbst wenn keine Auffüllungsbytes vorhanden wären, würde die int ohne Berücksichtigung der Endianness verglichen werden.

[bearbeiten] 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 << " precedes ";
    else if (rc > 0)
        std::cout << " follows ";
    else
        std::cout << " compares equal to ";
    std::cout << std::string(rhs, sz) << " in lexicographical order\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 precedes abd in lexicographical order
abd follows abc in lexicographical order
abc compares equal to abc in lexicographical order

[bearbeiten] Siehe auch

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