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