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ą.
Wyzwanie
ŁatwyNapisz 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:
- Zadeklarować tablicę znaków o nazwie
namezawierającą dokładnie 5 elementów - 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)
- Zadeklarować drugą tablicę znaków o nazwie
cityzawierającą dokładnie 7 elementów - 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'
- Użyć osobnych przypisań znaków 'B', 'o', 's', 't', 'o', 'n' oraz
- Wypisać oba ciągi znaków za pomocą
printfi specyfikatora formatu%s - Zademonstrować, co dzieje się bez zakończenia znakiem null, tworząc trzecią tablicę znaków o nazwie
testzawierającą 4 elementy - Zainicjować tablicę
testtylko znakami 'A', 'B', 'C', 'D' (bez znaku kończącego null) - Wypisać tablicę
testza 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;
}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
1Podstawy wskaźników
Czym jest wskaźnik?Deklarowanie wskaźnikówOperator pobrania adresu (&)Operator dereferencji (*)Wskaźniki NULLPodsumowanie: podstawy wskaźników4Projekt: Proste narzędzie tekstowe
Przegląd projektuLiczenie znaków2Wskaźniki i tablice
Nazwy tablic jako wskaźnikiElementy tablic — wskaźnikiArytmetyka wskaźnikówPorównywanie wskaźnikówPodsumowanie: przechodzenie po tablicy za pomocą wskaźników5Wskaźniki i funkcje
Przekazywanie przez wartośćPrzekazywanie wskaźników do funkcjiModyfikowanie zmiennych za pomocą wskaźnikówKlasyczny przykład: zamianaPrzekazywanie tablic do funkcjiPowtórka: argumenty wskaźnikowe funkcji8Struktury i wskaźniki
Wskaźniki do strukturOperator strzałki (->)Przekazywanie struktur przez wartośćPrzekazywanie wskaźników do strukturDynamiczna alokacja strukturPodsumowanie: modyfikowanie struktury — wskaźnik11Końcowe zadania powtórkowe
Powtórka: dynamiczne łączenie ciągów znakówPowtórka: tablica strukturPowtórka: licznik częstotliwości słów3Tablice znaków i ciągi znaków
Ciągi znaków jako tablice charZnak końca ciąguWczytywanie ciągu za pomocą scanfUżywanie strlen()Używanie strcpy()Używanie strcat()Używanie strcmp()Podsumowanie: podstawowe funkcje do obsługi ciągów znakówPoćwicz samodzielnie: Kompilator C online