Menu
Coddy logo textTech

Der Null-Terminator

Teil des Abschnitts Logic & Flow der C-Journey von Coddy — Lektion 13 von 63.

Sie haben gelernt, dass Strings in C Zeichen-Arrays sind, aber es gibt ein entscheidendes Detail, damit sie richtig funktionieren: Jeder C-String muss mit einem speziellen Zeichen enden, das als Null-Terminator bezeichnet wird, geschrieben als \0.

Der Null-Terminator ist ein Zeichen mit dem ASCII-Wert Null, das das Ende einer Zeichenfolge markiert. Ohne ihn wüssten Funktionen wie printf nicht, wo Ihre Zeichenfolge endet, und würden so lange weiter Speicher auslesen, bis sie zufällig auf ein Null-Byte stoßen, was oft zu unbrauchbaren Ausgaben führt.

char word[6] = {'H', 'e', 'l', 'l', 'o', '\0'};
// Das \0 sagt C: "Der String endet hier"

Wenn Sie einen String mit einem Literal wie "Hello" initialisieren, fügt C automatisch den Null-Terminator für Sie hinzu. Aber wenn Sie einen String manuell Zeichen für Zeichen aufbauen, müssen Sie daran denken, \0 am Ende hinzuzufügen.

Dieser Null-Terminator ist der Grund, warum ein Wort mit 5 Zeichen wie „Hello“ ein Character-Array mit 6 Elementen benötigt – ein zusätzlicher Platz für das \0. Das Verständnis dieses Konzepts ist essenziell, da es die Grundlage dafür ist, wie alle C-String-Funktionen bestimmen, wo Strings beginnen und enden.

challenge icon

Aufgabe

Einfach

Schreiben Sie ein C-Programm, das das Erstellen und Arbeiten mit Strings durch manuelle zeichenweise Initialisierung mit ordnungsgemäßer Nullterminierung demonstriert. Ihr Programm sollte:

  1. Ein Zeichen-Array namens name mit genau 5 Elementen deklarieren
  2. Das name Array manuell Zeichen für Zeichen initialisieren, um "John" mit ordnungsgemäßer Nullterminierung zu buchstabieren:
    • Erstes Element: 'J'
    • Zweites Element: 'o'
    • Drittes Element: 'h'
    • Viertes Element: 'n'
    • Fünftes Element: '\0' (Nullterminator)
  3. Ein zweites Zeichen-Array namens city mit genau 7 Elementen deklarieren
  4. Das city Array manuell Zeichen für Zeichen initialisieren, um "Boston" mit ordnungsgemäßer Nullterminierung zu buchstabieren:
    • Verwenden Sie einzelne Zeichenzuweisungen für 'B', 'o', 's', 't', 'o', 'n' und '\0'
  5. Beide Strings mit printf und dem Formatspezifizierer %s ausgeben
  6. Demonstrieren, was ohne Nullterminierung passiert, indem Sie ein drittes Zeichen-Array namens test mit 4 Elementen erstellen
  7. Initialisieren Sie test nur mit den Zeichen 'A', 'B', 'C', 'D' (kein Nullterminator)
  8. Geben Sie das test Array mit %s aus, um eine unvorhersehbare Ausgabe zu zeigen

Ihre Ausgabe sollte die Ergebnisse im folgenden Format anzeigen:

Name: John
City: Boston
Test without null terminator: ABCD[unpredictable characters]

Diese Herausforderung testet Ihr Verständnis der manuellen String-Konstruktion, die entscheidende Bedeutung des Nullterminators '\0' in C-Strings und wie printf mit %s darauf angewiesen ist, den Nullterminator zu finden, um zu wissen, wo der String endet.

Spickzettel

C-Strings sind Zeichen-Arrays, die mit einem Null-Terminator \0 enden müssen, um das Ende des Strings zu markieren.

Der Null-Terminator hat den ASCII-Wert Null und teilt Funktionen wie printf mit, wo der String endet:

char word[6] = {'H', 'e', 'l', 'l', 'o', '\0'};
// Das \0 teilt C mit: "Der String endet hier"

Bei der Verwendung von String-Literalen wie "Hello" fügt C automatisch den Null-Terminator hinzu. Beim Erstellen von Strings Zeichen für Zeichen müssen Sie \0 manuell hinzufügen.

Ein String benötigt ein zusätzliches Array-Element für den Null-Terminator – "Hello" (5 Zeichen) erfordert ein Array mit 6 Elementen.

Probier es selbst

#include <stdio.h>

int main() {
    // TODO: Schreiben Sie hier Ihren Code
    // Deklarieren und initialisieren Sie die Zeichen-Arrays wie angegeben
    
    // Ergebnisse ausgeben
    
    return 0;
}
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Logic & Flow