Provided by: manpages-de-dev_4.23.1-1_all bug

BEZEICHNUNG

       strcmp, strncmp - Vergleich zweier Zeichenketten

BIBLIOTHEK

       Standard-C-Bibliothek (libc, -lc)

ÜBERSICHT

       #include <string.h>

       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 berücksichtigt  (für  eine  Locale-berücksichtigende  Vergleichsfunktion
       siehe strcoll(3)). Der Vergleich erfolgt mittels Zeichen (»character«) ohne Vorzeichen.

       strcmp() liefert eine Ganzzahl zurück, die das Ergebnis des Vergleichs wie folgt anzeigt:

       •  0, falls s1 und s2 identisch sind;

       •  ein negativer Wert, falls s1 kleiner als s2 ist;

       •  ein positiver Wert, falls s1 größer als s2 ist.

       Die  Funktion  strncmp()  ist ähnlich. Der Unterschied ist, dass strncmp() (höchstens) die
       ersten n Bytes von s1 und s2 vergleicht.

RÜCKGABEWERT

       Die Funktionen strcmp() und strncmp() geben eine ganze Zahl zurück. Die Zahl ist  kleiner,
       gleich oder größer als Null, wenn s1 gefunden wurde und kleiner, gleich oder größer als s2
       ist (bzw. die ersten n Byte von s1).

ATTRIBUTE

       Siehe attributes(7) für eine Erläuterung der in diesem Abschnitt verwandten Ausdrücke.

       ┌─────────────────────────────────────────────────────┬───────────────────────┬───────────┐
       │SchnittstelleAttributWert      │
       ├─────────────────────────────────────────────────────┼───────────────────────┼───────────┤
       │strcmp(), strncmp()                                  │ Multithread-Fähigkeit │ MT-Sicher │
       └─────────────────────────────────────────────────────┴───────────────────────┴───────────┘

VERSIONEN

       POSIX.1 spezifiziert nur, dass:

              Das Vorzeichen eines von 0 verschiedenen Rückgabewertes 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 Rückgabewert 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  übergeben werden) und strncmp() (wenn drei Argumente übergeben werden) verwandt
       werden. Zuerst ein paar Beispiele zum Einsatz von strcmp():

           $ ./string_comp ABC ABC
           <str1> und <str2> sind identisch
           $ ./string_comp ABC AB      # »C« ist ASCII 67; »C« - »\0« = 67
           <str1> ist größer als <str2> (67)
           $ ./string_comp ABA ABZ     # »A« ist ASCII 65; »Z« ist ASCII 90
           <str1> ist kleiner als <str2> (-25)
           $ ./string_comp ABJ ABC
           <str1> ist größer als <str2> (7)
           $ ./string_comp $'\201' A   # 0201 - 0101 = 0100 (oder 64 dezimal)
           <str1> ist größer als <str2> (64)

       Das letzte Beispiel verwendet eine bash(1)-spezifische Syntax,  um  eine  Zeichenkette  zu
       erzeugen,   die   einen   8-Bit-ASCII-Code   enthält;   das   Ergebnis   zeigt,  dass  der
       Zeichenkettenvergleich vorzeichenlose Zeichen verwendet.

       Und dann ein paar Beispiele mit strncmp():

           $ ./string_comp ABC AB 3
           <str1> ist größer als <str2> (67)
           $ ./string_comp ABC AB 2
           <str1> und <str2> sind identisch in den ersten 2 Byte

   Programmquelltext

       /* string_comp.c

          Lizensiert unter der GNU General Public License v2 oder neuer.
       */
       #include <stdio.h>
       #include <stdlib.h>
       #include <string.h>

       int
       main(int argc, char *argv[])
       {
           int res;

           if (argc < 3) {
               fprintf(stderr, "Aufruf: %s <zeichenkette1> <zeichenkette2> [<län>]\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("<zeichenkette1> und <zeichenkette2> sind gleich");
               if (argc > 3)
                   printf(" in den ersten %d byte\n", atoi(argv[3]));
               printf("\n");
           } else if (res < 0) {
               printf("<zeichenkette1> ist kleiner als <zeichenkette2> (%d)\n", res);
           } else {
               printf("<zeichenkette1> ist größer als <zeichenkette2> (%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)

ÜBERSETZUNG

       Die  deutsche  Übersetzung  dieser  Handbuchseite  wurde  von Markus Schmitt <fw@math.uni-
       sb.de>,  Martin  Eberhard   Schauer   <Martin.E.Schauer@gmx.de>   und   Helge   Kreutzmann
       <debian@helgefjell.de> erstellt.

       Diese  Übersetzung  ist  Freie  Dokumentation;  lesen  Sie  die GNU General Public License
       Version 3 ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩ oder neuer bezüglich der  Copyright-
       Bedingungen. Es wird KEINE HAFTUNG übernommen.

       Wenn Sie Fehler in der Übersetzung dieser Handbuchseite finden, schicken Sie bitte eine E-
       Mail an die Mailingliste der Übersetzer ⟨debian-l10n-german@lists.debian.org⟩.