strcmp(3) Library Functions Manual strcmp(3) BEZEICHNUNG strcmp, strncmp - Vergleich zweier Zeichenketten BIBLIOTHEK Standard-C-Bibliothek (libc, -lc) UBERSICHT #include int strcmp(const char *s1, const char *s2); int strncmp(const char s1[.n], const char s2[.n], size_t n); BESCHREIBUNG Die Funktion strcmp() vergleicht die beiden Zeichenketten s1 und s2 miteinander. Die Locale wird nicht berucksichtigt (fur eine Locale-berucksichtigende Vergleichsfunktion siehe strcoll(3)). Der Vergleich erfolgt mittels Zeichen (>>character<<) ohne Vorzeichen. strcmp() liefert eine Ganzzahl zuruck, die das Ergebnis des Vergleichs wie folgt anzeigt: o 0, falls s1 und s2 identisch sind; o ein negativer Wert, falls s1 kleiner als s2 ist; o ein positiver Wert, falls s1 grosser als s2 ist. Die Funktion strncmp() ist ahnlich. Der Unterschied ist, dass strncmp() (hochstens) die ersten n Bytes von s1 und s2 vergleicht. RUCKGABEWERT Die Funktionen strcmp() und strncmp() geben eine ganze Zahl zuruck. Die Zahl ist kleiner, gleich oder grosser als Null, wenn s1 gefunden wurde und kleiner, gleich oder grosser als s2 ist (bzw. die ersten n Byte von s1). ATTRIBUTE Siehe attributes(7) fur eine Erlauterung der in diesem Abschnitt verwandten Ausdrucke. +--------------------------------+-------------------------+-----------+ |Schnittstelle | Attribut | Wert | +--------------------------------+-------------------------+-----------+ |strcmp(), strncmp() | Multithread-Fahigkeit | MT-Sicher | +--------------------------------+-------------------------+-----------+ VERSIONEN POSIX.1 spezifiziert nur, dass: Das Vorzeichen eines von 0 verschiedenen Ruckgabewertes muss durch das Vorzeichen des Unterschiedes zwischen den Werten des ersten Byte-Paares, die sich in den zu vergleichenden Zeichenketten unterscheiden, bestimmt werden, wobei beide Bytes als Typ unsigned char interpretiert werden. In Glibc, wie auch den meisten anderen Implementierungen, ist der Ruckgabewert das arithmetische Ergebnis der Rechnung, bei der das letzte verglichene Byte in s2 vom letzten verglichenen Byte in s1 abgezogen wird. (Falls die zwei Zeichen identisch sind, ist die Differenz 0.) STANDARDS C11, POSIX.1-2008. GESCHICHTE POSIX.1-2001, C89, SVr4, 4.3BSD. BEISPIELE Das nachfolgende Programm kann zur Darstellung der Aktion von strcmp() (wenn zwei Argumente ubergeben werden) und strncmp() (wenn drei Argumente ubergeben werden) verwandt werden. Zuerst ein paar Beispiele zum Einsatz von strcmp(): $ ./string_comp ABC ABC und sind identisch $ ./string_comp ABC AB # >>C<< ist ASCII 67; >>C<< - >>\0<< = 67 ist grosser als (67) $ ./string_comp ABA ABZ # >>A<< ist ASCII 65; >>Z<< ist ASCII 90 ist kleiner als (-25) $ ./string_comp ABJ ABC ist grosser als (7) $ ./string_comp $'\201' A # 0201 - 0101 = 0100 (oder 64 dezimal) ist grosser als (64) Das letzte Beispiel verwendet eine bash(1)-spezifische Syntax, um eine Zeichenkette zu erzeugen, die einen 8-Bit-ASCII-Code enthalt; das Ergebnis zeigt, dass der Zeichenkettenvergleich vorzeichenlose Zeichen verwendet. Und dann ein paar Beispiele mit strncmp(): $ ./string_comp ABC AB 3 ist grosser als (67) $ ./string_comp ABC AB 2 und sind identisch in den ersten 2 Byte Programmquelltext /* string_comp.c Lizensiert unter der GNU General Public License v2 oder neuer. */ #include #include #include int main(int argc, char *argv[]) { int res; if (argc < 3) { fprintf(stderr, "Aufruf: %s []\n", argv[0]); exit(EXIT_FAILURE); } if (argc == 3) res = strcmp(argv[1], argv[2]); else res = strncmp(argv[1], argv[2], atoi(argv[3])); if (res == 0) { printf(" und sind gleich"); if (argc > 3) printf(" in den ersten %d byte\n", atoi(argv[3])); printf("\n"); } else if (res < 0) { printf(" ist kleiner als (%d)\n", res); } else { printf(" ist grosser als (%d)\n", res); } exit(EXIT_SUCCESS); } SIEHE AUCH memcmp(3), strcasecmp(3), strcoll(3), string(3), strncasecmp(3), strverscmp(3), wcscmp(3), wcsncmp(3), ascii(7) UBERSETZUNG Die deutsche Ubersetzung dieser Handbuchseite wurde von Markus Schmitt , Martin Eberhard Schauer und Helge Kreutzmann erstellt. Diese Ubersetzung ist Freie Dokumentation; lesen Sie die GNU General Public License Version 3 oder neuer bezuglich der Copyright-Bedingungen. Es wird KEINE HAFTUNG ubernommen. Wenn Sie Fehler in der Ubersetzung dieser Handbuchseite finden, schicken Sie bitte eine E-Mail an die Mailingliste der Ubersetzer . Linux man-pages 6.06 31. Oktober 2023 strcmp(3)