std::memcmp
| 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) | |
| vergleicht eine bestimmte Anzahl von Zeichen aus zwei Strings (Funktion) | |
| C-Dokumentation für memcmp
| |