Wenn man Zeichenketten in C vergleicht, was verwendet man? Die strcmp‑Funktion prüft, ob zwei Zeichenketten gleich sind – so, als würde man das Programm fragen: „Sind diese beiden gleich?“ Natürlich kann ein Programm nicht entscheiden, ob Katzen oder Hunde süßer sind, aber es kann den Unterschied zwischen „HELLO“ und „hello“ erkennen. In diesem Artikel untersuchen wir, wie strcmp funktioniert, wie man es verwendet und häufige Fehler, auf die man achten sollte.
1. Was ist die strcmp‑Funktion?
Die strcmp‑Funktion vergleicht zwei Zeichenketten Zeichen für Zeichen und gibt einen ganzzahligen Wert zurück, der das Ergebnis beschreibt. So verhält sie sich:
- 0 : Die Zeichenketten sind exakt gleich
- Positiver Wert : Die erste Zeichenkette kommt nach der zweiten im lexikografischen (Wörterbuch‑) Ordnung
- Negativer Wert : Die erste Zeichenkette kommt vor der zweiten im lexikografischen (Wörterbuch‑) Ordnung
Also können Sie nicht nur prüfen, ob zwei Zeichenketten identisch sind, sondern auch bestimmen, welche zuerst kommt. Hier ein einfaches Beispiel, wie man sie im Code verwendet:
#include <stdio.h>
#include <string.h>
int main() {
    char str1[] = "Hello";
    char str2[] = "World";
    int result = strcmp(str1, str2);
    printf("Result of strcmp: %dn", result);
    return 0;
}
Dieser Code vergleicht „Hello“ und „World“ und gibt das Ergebnis aus. Wichtig zu beachten ist, dass strcmp case‑sensitive (Groß‑/Kleinschreibung beachtet) ist, sodass „HELLO“ und „hello“ als unterschiedliche Zeichenketten behandelt werden.
2. Wie strcmp im Hintergrund funktioniert
Das Verhalten von strcmp ist einfach, aber leistungsfähig. Es vergleicht zwei Zeichenketten Zeichen für Zeichen von Anfang an, und sobald ein Unterschied gefunden wird, gibt es die Differenz dieser Zeichen zurück. Dieser Mechanismus ist auch für alphabetische Vergleiche nützlich – zum Beispiel vergleicht strcmp bei „apple“ und „banana“ zuerst ‚a‘ und ‚b‘ und liefert einen negativen Wert.
Hier ein weiteres Programmbeispiel, das Ihnen hilft zu verstehen, wie strcmp funktioniert:
#include <stdio.h>
#include <string.h>
int main() {
    char str1[] = "apple";
    char str2[] = "banana";
    int result = strcmp(str1, str2);
    if (result == 0) {
        printf("The strings match.n");
    } else if (result < 0) {
        printf("str1 comes before str2.n");
    } else {
        printf("str1 comes after str2.n");
    }
    return 0;
}
Dieser Code vergleicht „apple“ und „banana“. Wie erwartet zeigt strcmp, dass „apple“ vor „banana“ in der lexikografischen Reihenfolge kommt. Das macht es zu einem praktischen Werkzeug, um Zeichenketten alphabetisch zu sortieren.

3. Beispiele für die Verwendung von strcmp
1. Benutzereingaben überprüfen
strcmp ist nützlich, wenn Sie Benutzereingaben mit vorhandenen Daten vergleichen möchten – zum Beispiel zu prüfen, ob ein Passwort dem korrekten entspricht.
#include <stdio.h>
#include <string.h>
int main() {
    char password[] = "secret";
    char input[256];
    printf("Enter your password: ");
    scanf("%s", input);
    if (strcmp(password, input) == 0) {
        printf("Password match.n");
    } else {
        printf("Incorrect password.n");
    }
    return 0;
}
Dieses Programm vergleicht das eingegebene Passwort mit dem korrekten mittels strcmp.
2. Sortieren in lexikografischer Reihenfolge
strcmp ist ebenfalls praktisch, um Zeichenketten alphabetisch zu sortieren. Beim Sortieren einer Wortliste können Sie strcmp verwenden, um zu bestimmen, welches Wort zuerst kommen soll.
4. Alternativen zu strcmp
Obwohl strcmp sehr nützlich ist, gibt es Fälle, in denen andere Funktionen je nach Ziel geeigneter sein können.
strncmp: Teil einer Zeichenkette vergleichen
Wenn Sie nur einen Teil einer Zeichenkette vergleichen möchten, ist strncmp die bessere Wahl. Zum Beispiel, wenn Sie nur die ersten 3 Zeichen zweier Zeichenketten vergleichen wollen, verwenden Sie diese Funktion.
#include <stdio.h>
#include <string.h>
int main() {
    char str1[] = "apple";
    char str2[] = "apricot";
    if (strncmp(str1, str2, 3) == 0) {
        printf("The first 3 characters match.n");
    } else {
        printf("The first 3 characters do not match.n");
    }
    return 0;
}
memcmp: Rohspeicher vergleichen
memcmp wird verwendet, um rohen Speicher zu vergleichen, nicht nur Zeichenketten. Es ist nützlich, wenn man mit Binärdaten oder nicht‑textuellen Speicherblöcken arbeitet.
5. Häufige Fehler bei der Verwendung von strcmp
1. Groß‑ und Kleinschreibung ignorieren
strcmp ist case‑sensitive (beachtet die Groß‑ und Kleinschreibung). Das bedeutet, dass „HELLO“ und „hello“ als unterschiedliche Zeichenketten gelten. Wenn Sie einen Vergleich benötigen, der die Groß‑ und Kleinschreibung ignoriert, sollten Sie stattdessen strcasecmp verwenden (Hinweis: diese Funktion kann je nach Umgebung variieren).
2. Vergleich von NULL‑Zeigern
Wenn Sie versuchen, strcmp zum Vergleich eines NULL‑Zeigers zu verwenden, wird Ihr Programm wahrscheinlich abstürzen. Stellen Sie stets sicher, dass die zu vergleichenden Zeichenketten korrekt initialisiert wurden.
Fazit
strcmp ist eine wesentliche Funktion in der C‑Programmierung, die den Vergleich von Zeichenketten einfach und effektiv macht. Wir haben praxisnahe Beispiele wie Passwortprüfungen und alphabetische Sortierung durchgegangen, um zu zeigen, wie sie in der Praxis verwendet wird. Wenn Sie mit Zeichenketten in Ihren Programmen arbeiten, werden Sie diese Funktion garantiert als äußerst nützlich empfinden – probieren Sie sie aus und sehen Sie, wie sie in Ihren Code passt!

 
 


