Menu
Coddy logo textTech

Znak końca ciągu

Część sekcji Logika i sterowanie przepływem ścieżki C w Coddy. Lekcja 13 z 63.

Dowiedziałeś się, że ciągi znaków w C są tablicami znaków, ale jest jeden kluczowy szczegół, dzięki któremu działają poprawnie: każdy ciąg znaków w C musi kończyć się specjalnym znakiem nazywanym znakiem null, zapisywanym jako \0.

Terminator null to znak o wartości ASCII równej zero, który oznacza koniec ciągu znaków. Bez niego funkcje takie jak printf nie wiedziałyby, gdzie kończy się ciąg znaków, i kontynuowałyby odczytywanie pamięci, aż przypadkowo natrafiłyby na bajt zerowy, często generując bezsensowny wynik.

char word[6] = {'H', 'e', 'l', 'l', 'o', '\0'};
// \0 informuje C: "The string ends here"

Gdy inicjalizujesz ciąg znaków literałem, takim jak "Hello", C automatycznie dodaje za Ciebie terminator null. Jeśli jednak ręcznie tworzysz ciąg znaków znak po znaku, musisz pamiętać o dodaniu \0 na końcu.

Ten terminator null jest powodem, dla którego 5-znakowe słowo, takie jak "Hello", wymaga tablicy znaków o 6 elementach — jednego dodatkowego miejsca na \0. Zrozumienie tej koncepcji jest niezbędne, ponieważ stanowi podstawę działania wszystkich funkcji łańcuchów znaków w C, które określają, gdzie łańcuchy się zaczynają i kończą.

challenge icon

Wyzwanie

Łatwy

Napisz program w C, który demonstruje tworzenie i obsługę ciągów znaków przez ręczne inicjowanie ich znak po znaku z prawidłowym zakończeniem znakiem null. Twój program powinien:

  1. Zadeklarować tablicę znaków o nazwie name zawierającą dokładnie 5 elementów
  2. Ręcznie zainicjować tablicę name, przypisując znaki po kolei, tak aby utworzyły napis "John" z prawidłowym zakończeniem znakiem null:
    • Pierwszy element: 'J'
    • Drugi element: 'o'
    • Trzeci element: 'h'
    • Czwarty element: 'n'
    • Piąty element: '\0' (znak kończący null)
  3. Zadeklarować drugą tablicę znaków o nazwie city zawierającą dokładnie 7 elementów
  4. Ręcznie zainicjować tablicę city, przypisując znaki po kolei, tak aby utworzyły napis "Boston" z prawidłowym zakończeniem znakiem null:
    • Użyć osobnych przypisań znaków 'B', 'o', 's', 't', 'o', 'n' oraz '\0'
  5. Wypisać oba ciągi znaków za pomocą printf i specyfikatora formatu %s
  6. Zademonstrować, co dzieje się bez zakończenia znakiem null, tworząc trzecią tablicę znaków o nazwie test zawierającą 4 elementy
  7. Zainicjować tablicę test tylko znakami 'A', 'B', 'C', 'D' (bez znaku kończącego null)
  8. Wypisać tablicę test za pomocą %s, aby pokazać nieprzewidywalny wynik

Wynik powinien wyświetlać rezultaty w następującym formacie:

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

To wyzwanie sprawdza Twoje rozumienie ręcznego tworzenia ciągów znaków, kluczowego znaczenia znaku kończącego null '\0' w ciągach znaków w C oraz tego, jak printf ze specyfikatorem %s polega na znalezieniu znaku kończącego null, aby określić, gdzie kończy się ciąg.

Spróbuj swoich sił

#include <stdio.h>

int main() {
    // TODO: Napisz tutaj swój kod
    // Zadeklaruj i zainicjalizuj tablice znaków zgodnie ze specyfikacją
    
    // Wyświetl wyniki
    
    return 0;
}
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Logika i sterowanie przepływem

Poćwicz samodzielnie: Kompilator C online