std:: memcmp
|
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
|
|