C Strings einfach gemacht: Deklaration, Ein- & Ausgabe, Bibliotheksfunktionen
Was ist ein String in C?
Ein String in C ist eine zusammenhängende Folge von Zeichen, die durch das Null-Zeichen (\0) terminiert wird. Obwohl die Sprache keinen dedizierten String-Typ hat, wird ein String meist als Array von char-Werten dargestellt. Der Compiler fügt den Null-Terminator automatisch an, wenn Sie einen String-Literal initialisieren.
"Welcome to the world of programming!"
Der Standardbibliotheks-Header <string.h> bietet eine Fülle von Funktionen für effiziente String-Manipulation.
Strings deklarieren und initialisieren
Da C einen String als Zeichen-Array behandelt, müssen Sie die Array-Größe angeben. Die Größe definiert die maximale Anzahl an Zeichen (ohne Null-Terminator), die gespeichert werden können.
char string_variable_name[array_size];
Typische Deklarationen:
char first_name[15]; /* hält bis zu 14 Zeichen + \0 */ char last_name[15];
Wenn Sie einen Initialisierer angeben, zählt der Compiler die Zeichen und fügt den Null-Terminator automatisch hinzu. Die Array-Größe kann weggelassen werden, wenn Sie einen Initialisierer geben.
char first_name[15] = "ANTHONY";
char first_name[] = "NATHAN"; /* Größe wird inferiert */
char string3[6] = {'h','e','l','l','o','\0'}; /* expliziter Terminator */
Strings vom Benutzer einlesen
Eingabe-Funktionen variieren in Sicherheit und Verhalten:
scanf("%s", name)liest bis Whitespace, ist aber anfällig für Pufferüberläufe.gets()liest eine ganze Zeile, ist unsicher und seit C11 entfernt.fgets(name, size, stdin)liest bis zusize-1Zeichen, lässt Platz für Null-Terminator.
Beispiel mit fgets:
#include <stdio.h>
int main() {
char name[50];
printf("Enter your full name: ");
fgets(name, sizeof(name), stdin);
printf("Your name is %s", name);
return 0;
}
Strings ausgeben
Der klassische Weg, einen String anzuzeigen, ist printf("%s", name);. Zwei praktische Alternativen:
fputs(name, stdout)– schreibt direkt in den Ausgabestream.puts(name)– schreibt den String gefolgt von einem Zeilenumbruch.
Beispiel mit puts:
#include <stdio.h>
int main() {
char greeting[] = "Hello, world!";
puts(greeting);
return 0;
}
Die String-Bibliothek (<string.h>)
Häufig verwendete Funktionen:
| Funktion | Beschreibung |
|---|---|
| strlen | Gibt die Länge eines Strings zurück (ohne Null-Terminator). |
| strcat | Hängt einen String an einen anderen an. |
| strcmp | Vergleicht zwei Strings lexikographisch. |
| strcpy | Kopiert einen String. |
| strncmp | Vergleicht bis zu n Zeichen. |
| strncpy | Kopiert bis zu n Zeichen. |
| strchr | Findet erstes Vorkommen eines Zeichens. |
| strrchr | Findet letztes Vorkommen eines Zeichens. |
| strstr | Findet einen Substring. |
| strncat | Verkettet bis zu n Zeichen. |
| strlwr | Konvertiert zu Kleinbuchstaben (nicht Standard). |
| strupr | Konvertiert zu Großbuchstaben (nicht Standard). |
| strrev | Kehrt einen String um (nicht Standard). |
Illustratives Programm:
#include <stdio.h>
#include <string.h>
int main() {
char str1[20] = "Hello";
char str2[20] = " World!";
char result[40];
/* Vergleich */
if (strcmp(str1, str2) == 0) puts("Strings are equal");
else puts("Strings are not equal");
/* Konkatenation */
strcat(str1, str2); // str1 enthält nun "Hello World!"
printf("Concatenated: %s\n", str1);
/* Länge */
printf("Length of str1: %zu\n", strlen(str1));
/* Kopie */
strcpy(result, str1);
printf("Copied string: %s\n", result);
return 0;
}
String in Zahl konvertieren
Standard-Konvertierungen:
atoi– konvertiert zuint.atof– konvertiert zudouble.atol– konvertiert zulong.
Beispiel mit atoi:
#include <stdio.h>
#include <stdlib.h>
int main() {
char number_str[20];
printf("Enter a number: ");
fgets(number_str, sizeof(number_str), stdin);
int num = atoi(number_str);
printf("You entered %d\n", num);
return 0;
}
Wichtigste Erkenntnisse
- Ein String ist eine Folge von Zeichen in einem
char-Array, terminiert mit \0. - Array-Größe vor Verwendung deklarieren, oder Compiler inferiert sie bei Initialisierung.
- Verwenden Sie
fgetsfür sichere Eingabe; vermeiden Siegetsundscanf("%s")ohne Bounds-Checking. - Nutzen Sie
<string.h>für robuste String-Operationen. - Konvertieren Sie String-Zahlen mit
atoi,atofoderatol, um Laufzeitfehler zu vermeiden. - Beachten Sie, dass String-Literale read-only sind; ihre Modifikation führt zu undefiniertem Verhalten.
C Sprache
- Java Strings meistern: Erstellung, Methoden und Best Practices
- String-Repräsentationen in Java Enums meistern
- String-Listen in VHDL erstellen: Best Practices & Beispiel
- C++ Arrays verstehen: Deklaration, Initialisierung und Pointer‑Techniken
- C++ String‑Funktionen meistern: strcpy, strcat, strlen, strcmp – Praxisbeispiele
- realloc() in C: Syntax, Best Practices & Beispiel
- C's free() Funktion meistern: Praktischer Leitfaden & Beispiel
- Java String length() Methode: String-Länge ermitteln (Beispiel)
- Python String-Operationen meistern: Replace, Join, Split, Reverse und Case Conversion
- Java Strings Klasse: String-Erstellung & Manipulation meistern