C-String-Zuweisung und -Manipulation: Deklaration, Initialisierung und gängige Funktionen erklärt

1. Einführung

In der Programmiersprache C werden Zeichenketten einfach als Arrays von Zeichen behandelt. Aufgrund dieses Merkmals müssen sie anders gehandhabt werden als Zeichenketten in anderen Sprachen. Insbesondere muss beim Zuweisen oder Initialisieren von Zeichenketten ein Null‑Zeichen () eingefügt werden, um die Zeichenkette korrekt zu terminieren. In diesem Artikel zum Thema „C‑String‑Zuweisung“ behandeln wir alles von grundlegenden Deklarationen über Zuweisungs‑ und Manipulationsmethoden bis hin zu wichtigen Vorsichtsmaßnahmen für die Stabilität des Programms.

2. Deklaration und Initialisierung von Zeichenketten

In C werden Zeichenketten über Arrays von Zeichen deklariert. Im Folgenden finden Sie einige gängige Methoden zur Deklaration und Initialisierung.

Deklaration und Initialisierung mit Arrays

Zeichenketten können über Arrays wie folgt deklariert und initialisiert werden:

char greeting[] = "Hello";

Im obigen Beispiel wird die Zeichenkette greeting mit „Hello“ initialisiert, und ein Null‑Zeichen () wird automatisch am Ende angehängt. In C kann man den =‑Operator verwenden, um Arrays zum Zeitpunkt der Deklaration zu initialisieren, und es ist üblich, die Größenangabe bei dieser Methode wegzulassen.

Hinzufügen eines Null‑Zeichens

Wenn Sie eine Zeichenkette Zeichen für Zeichen initialisieren, müssen Sie das Null‑Zeichen manuell hinzufügen, wie unten gezeigt:

char greeting[6] = {'H', 'e', 'l', 'l', 'o', ''};

Fehlt dieses Null‑Zeichen, funktionieren die String‑Manipulationsfunktionen von C nicht korrekt, da sie über die Speichergrenze hinaus lesen könnten, was zu unerwartetem Verhalten führt.

3. Wie man Zeichenketten zuweist

In C kann man nicht direkt eine Zeichenkette einer anderen zuweisen. Um den Inhalt einer String‑Variablen in eine andere zu kopieren, verwendet man die Funktion strcpy.

Grundlegende Verwendung von strcpy

strcpy ist Teil der Standardbibliothek <string.h> und kann wie folgt verwendet werden:

#include <stdio.h>
#include <string.h>

int main() {
    char source[] = "Hello";
    char destination[10];
    strcpy(destination, source);
    printf("Copied string: %sn", destination);
    return 0;
}

In diesem Code wird der Inhalt von source in destination kopiert, sodass destination „Hello“ enthält. Da strcpy die Array‑Größe nicht berücksichtigt, ist Vorsicht geboten, um Buffer‑Overflows zu vermeiden.

4. String‑Manipulation

C bietet mehrere praktische Funktionen zur String‑Manipulation. Im Folgenden behandeln wir häufig genutzte Funktionen wie strlen, strcat und strcmp.

Länge einer Zeichenkette ermitteln: strlen

Um die Länge einer Zeichenkette zu erhalten, verwendet man die Funktion strlen. Diese gibt die Anzahl der Zeichen zurück, ohne das Null‑Zeichen zu zählen.

#include <stdio.h>
#include <string.h>

int main() {
    char str[] = "Hello";
    printf("String length: %zun", strlen(str));
    return 0;
}

Zeichenketten verketten: strcat

Die Funktion strcat hängt eine Zeichenkette an eine andere an.

#include <stdio.h>
#include <string.h>

int main() {
    char greeting[20] = "Hello";
    char name[] = " World";
    strcat(greeting, name);
    printf("Concatenated string: %sn", greeting);
    return 0;
}

Zeichenketten vergleichen: strcmp

Die Funktion strcmp vergleicht zwei Zeichenketten lexikografisch. Sie liefert 0, wenn sie gleich sind, oder einen positiven/negativen Wert, wenn sie sich unterscheiden.

#include <stdio.h>
#include <string.h>

int main() {
    char str1[] = "Hello";
    char str2[] = "World";
    int result = strcmp(str1, str2);
    if (result == 0) {
        printf("Strings are equal.n");
    } else {
        printf("Strings are different.n");
    }
    return 0;
}

Damit lässt sich prüfen, ob Zeichenketten identisch sind, oder ihre Reihenfolge im Wörterbuch bestimmen.

5. Umgang mit Zeichenketten über Zeiger

Zeichenketten können auch über Zeiger verarbeitet werden. Das ermöglicht eine flexiblere Speicherverwaltung, aber falsche Operationen können zu Fehlern oder Abstürzen führen, daher ist Vorsicht geboten.

Zeichenketten mit Zeigern zuweisen

Wenn Sie Zeiger verwenden, können Sie sie wie folgt deklarieren und zuweisen:

#include <stdio.h>

int main() {
    char *greeting = "Hello";
    printf("%sn", greeting);
    return 0;
}

Wie gezeigt, kann ein Zeiger direkt auf ein String‑Literal zeigen. Der Inhalt eines String‑Literals kann jedoch nicht verändert werden.

6. Zusammenfassung und Vorsichtsmaßnahmen

Die Zuweisung und Manipulation von Zeichenketten in C ist anfällig für subtile Fehler wie Pufferüberläufe oder ungültigen Zeigerzugriff. Beim Einsatz von Funktionen wie strcpy oder strcat sollte stets die Array‑Größe berücksichtigt und ausreichend Pufferplatz zugewiesen werden. Ebenso ist beim Arbeiten mit Zeigern Vorsicht bei Nullzeichen und der Speicherverwaltung geboten. Wenn sie korrekt implementiert werden, können Zeichenkettenoperationen ein effektives Werkzeug für die Datenverarbeitung sein.

侍エンジニア塾