
Strings in C sind char-Arrays mit einem speziellen Abschlusszeichen: dem Nullzeichen '\0'. Ohne es weiß C nicht, wo der String endet!
String = char-Array + \0
char name[20] = "Hallo"; // Deklaration printf("%s\n", name); // Ausgabe scanf("%s", name); // Einlesen – KEIN &
⚠️ Wichtige Regeln
Array-Größe = Länge + 1 (für \0)
scanf("%s") ohne &
Zuweisung mit strcpy, nicht =
Vergleich mit strcmp, nicht ==
Der Null-Terminator \0
Jeder String in C endet mit dem Nullzeichen \0 (ASCII-Wert 0). C-Funktionen wie printf und strlen suchen nach diesem Zeichen um zu wissen, wo der String endet.
| Index | 0 | 1 | 2 | 3 | 4 | 5 |
|---|---|---|---|---|---|---|
| Zeichen | H | a | l | l | o | \0 |
| Bytes | 72 | 97 | 108 | 108 | 111 | 0 |
Der String "Hallo" hat 5 Buchstaben, braucht aber 6 Bytes im Speicher – den letzten für \0.
char name[5] = "Hallo"; // FALSCH! Kein Platz für \0 char name[6] = "Hallo"; // RICHTIG: 5 Zeichen + \0
⚠️ Immer +1 für \0 einplanen!
Für einen String der Länge n braucht man ein char-Array der Größe n+1. Fehlt der Platz für \0, liest C unkontrolliert weiter im Speicher – undefiniertes Verhalten!
Deklarationsformen
char s1[20] = "Hallo"; // Array, veränderbar, mit \0 char s2[] = "Welt"; // Größe auto (5 Bytes: W,e,l,t,\0) char *s3 = "Konstant"; // Pointer auf Literal – NICHT veränderbar! s1[0] = 'h'; // OK – s1 ist ein Array im Stack s3[0] = 'k'; // GEFÄHRLICH – Literal liegt im Read-only-Speicher!
| Form | Veränderbar? | Größe | Typischer Einsatz |
|---|---|---|---|
| char s[20] = "..." | Ja | Fest (20 Bytes) | Benutzereingaben, Verarbeitung |
| char s[] = "..." | Ja | Automatisch (Länge+1) | Feste Texte die geändert werden |
| char *s = "..." | Nein (read-only!) | Pointer (8 Bytes) | Konstante Texte, niemals schreiben |
⚠️ char *s ist read-only!
char *s3 = "Konstant" zeigt auf ein String-Literal im Read-only-Speicher. Schreiben auf s3[i] führt zu undefiniertem Verhalten oder Absturz. Für veränderbare Strings immer char s[N] verwenden!
scanf vs fgets
| scanf("%s") | fgets() | |
|---|---|---|
| Leerzeichen | Stoppt bei Leerzeichen | Liest Leerzeichen mit |
| Pufferüberlauf | Gefährlich (keine Größenprüfung) | Sicher (Größe angeben) |
| Zeilenumbruch | Ignoriert \n | Speichert \n mit im String |
| Empfehlung | Für einzelne Wörter | Für ganze Sätze / sicheres Einlesen |
char name[50]; // Variante 1: scanf – stoppt bei Leerzeichen scanf("%s", name); // "Max Mustermann" → nur "Max" // Variante 2: fgets – liest ganze Zeile (sicher) fgets(name, sizeof(name), stdin); // "Max Mustermann\n"
Häufige Fehler
| Fehler | Problem | Lösung |
|---|---|---|
| char s[5]; scanf("%s",s); | Buffer Overflow – Eingabe länger als Array | Array groß genug wählen oder scanf("%4s", s) |
| if (s1 == s2) | Vergleicht Speicheradressen, nicht den Inhalt! | if (strcmp(s1, s2) == 0) |
| char s[5]; s[0]='H'; s[1]='i'; | Fehlendes \0 am Ende – printf liest zu weit | s[2] = '\0'; nicht vergessen |
⚡ Code-Simulator
Teste Array- und String-Operationen direkt im Browser:

Ändere die Array-Werte oder den Code und beobachte die Ausgabe. So lernt man Arrays am besten!
🎯 Wissens-Quiz
📋 Spickzettel
✅ Checkliste Unit 23
- Ich weiß dass Strings char-Arrays mit \0 sind
- Ich deklariere Strings mit ausreichender Größe
- Ich nutze scanf/printf korrekt für Strings
- Ich kann einen String zeichenweise lesen