Der Null-Terminator
Teil des Abschnitts Logik & Ablauf der C-Journey von Coddy. Lektion 13 von 63.
Du hast gelernt, dass Strings in C Zeichenarrays sind, aber es gibt ein entscheidendes Detail, das dafür sorgt, dass sie ordnungsgemäß funktionieren: Jeder C-String muss mit einem speziellen Zeichen enden, dem sogenannten Nullterminator, geschrieben als \0.
Das Nullterminierungszeichen ist ein Zeichen mit dem ASCII-Wert null, das das Ende einer Zeichenkette markiert. Ohne dieses Zeichen wüssten Funktionen wie printf nicht, wo deine Zeichenkette endet, und würden den Speicher weiter auslesen, bis sie zufällig auf ein Nullbyte stoßen, was häufig eine fehlerhafte Ausgabe erzeugt.
char word[6] = {'H', 'e', 'l', 'l', 'o', '\0'};
// Das \0 sagt C: "Der String endet hier"Wenn du einen String mit einem Literal wie "Hello" initialisierst, fügt C automatisch den Nullterminator für dich hinzu. Wenn du jedoch manuell einen String Zeichen für Zeichen erstellst, musst du daran denken, am Ende \0 hinzuzufügen.
Dieser Nullterminator ist der Grund, warum ein 5-Zeichen-Wort wie „Hello“ ein Zeichenarray mit 6 Elementen benötigt – ein zusätzliches Element für \0. Das Verständnis dieses Konzepts ist entscheidend, da es die Grundlage dafür bildet, wie alle C-String-Funktionen bestimmen, wo Zeichenketten beginnen und enden.
Aufgabe
EinfachSchreibe ein C-Programm, das das Erstellen und Arbeiten mit Zeichenketten mithilfe einer manuellen Zeichen-für-Zeichen-Initialisierung mit ordnungsgemäßer Nullterminierung demonstriert. Dein Programm sollte:
- Ein Zeichenarray namens
namemit genau 5 Elementen deklarieren - Das
name-Array manuell Zeichen für Zeichen initialisieren, sodass "John" mit ordnungsgemäßer Nullterminierung entsteht:- Erstes Element: 'J'
- Zweites Element: 'o'
- Drittes Element: 'h'
- Viertes Element: 'n'
- Fünftes Element:
'\0'(Nullterminator)
- Ein zweites Zeichenarray namens
citymit genau 7 Elementen deklarieren - Das
city-Array manuell Zeichen für Zeichen initialisieren, sodass "Boston" mit ordnungsgemäßer Nullterminierung entsteht:- Individuelle Zeichen-Zuweisungen für 'B', 'o', 's', 't', 'o', 'n' und
'\0'verwenden
- Individuelle Zeichen-Zuweisungen für 'B', 'o', 's', 't', 'o', 'n' und
- Beide Zeichenketten mit
printfund dem Formatbezeichner%sausgeben - Demonstrieren, was ohne Nullterminierung geschieht, indem ein drittes Zeichenarray namens
testmit 4 Elementen erstellt wird testnur mit den Zeichen 'A', 'B', 'C', 'D' (ohne Nullterminator) initialisieren- Das
test-Array mit%sausgeben, um eine unvorhersehbare Ausgabe zu zeigen
Deine Ausgabe sollte die Ergebnisse im folgenden Format anzeigen:
Name: John
City: Boston
Test without null terminator: ABCD[unpredictable characters]Diese Aufgabe testet dein Verständnis der manuellen Erstellung von Zeichenketten, der entscheidenden Bedeutung des Nullterminators '\0' in C-Zeichenketten und der Tatsache, dass printf mit %s darauf angewiesen ist, den Nullterminator zu finden, um zu wissen, wo die Zeichenkette endet.
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;
}Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Logik & Ablauf
1Zeiger-Grundlagen
Was ist ein Zeiger?Zeiger deklarierenDer Adressoperator (&)Der Dereferenzierungsoperator (*)NULL-ZeigerZusammenfassung: Zeiger-Grundlagen4Projekt: Einfaches Text-Tool
ProjektübersichtZeichen zählen2Pointer und Arrays
Array-Namen als PointerArray-Elemente - PointerPointer-ArithmetikPointer vergleichenWiederholung: Array-Durchlauf mit Pointern5Zeiger und Funktionen
Wertübergabe (Pass-by-Value)Zeiger an Funktionen übergebenVariablen über Zeiger ändernEin klassisches Beispiel: SwapArrays an Funktionen übergebenZusammenfassung: Zeiger als Funktionsargumente8Structs und Zeiger
Zeiger auf StructsDer Pfeiloperator (->)Structs per Wert übergebenÜbergabe von Struct-ZeigernDynamische Allokation von StructsZusammenfassung: Struct ändern - Ptr11Finale Wiederholungsaufgaben
Wiederholung: Dynamische String-KonkatenationWiederholung: Array von StructsWiederholung: Wortfrequenz-Zähler3Character-Arrays und Strings
Strings als char-ArraysDer Null-TerminatorString-Eingabe mit scanfVerwendung von strlen()Verwendung von strcpy()Verwendung von strcat()Verwendung von strcmp()Zusammenfassung: Grundlegende String-FunktionenÜbe selbstständig: Online-C-Compiler