Rozdział 18
W dzisiejszych czasach komputer przestał być narzędziem tylko i wyłącznie do przetwarzania danych. Od programów komputerowych zaczęto wymagać czegoś nowego program w wyniku swojego działania nie ma zwracać danych, rozumianych tylko przez autora programu. lecz powinien być na tyle komunikatywny, aby przeciętny użytkownik komputera mógł bez problemu tenże komputer obsłużyć. Do przechowywania tychże komunikatów służą tzw. “łańcuchy” (ang. string) czyli ciągi znaków.
Język C nie jest wygodnym narzędziem do manipulacji napisami. Jak się wkrótce przekonamy, zestaw funkcji umożliwiających operacje iui napisach w bibliotece standardowej C jest raczej skromny. Dodatkowo, problemem jest s|>osób. w jaki łańcuchy przechowywane są w pamięci.
Napisy w języku C mogą być przyczyną wielu trudnych do wykrycia błędów w programach. Warto dobrze zrozumieć, jak należy operować na łańcuchach znaków i zachować szczególną ostrożność w tych miejscach, gdzie napisów używamy.
Napis jest zapisywany w kodzie programu jako ciąg znaków zawarty pomiędzy dwoma cudzysłowami.
printf ("Napis w języku C");
W punięei taki łańcuch je»t następującym |x> sobie ciągiem znaków (char), który kończy się znakiem “nuli” (czyli po prostu liczbą zero), zapisywanym jako '\0'.
Jeśli mamy napis, do poszczególnych znaków odwołujemy się jak w tablicy:
char *tekst = "Jakiś tam tekst";
printf("Xc\n", "przykład"[0]); /* wypisze p - znaki w napisach są numerowane od zera »/ printf("Xc\n", tekst[2]); /* wypisze k •/
Ponieważ napis w pamięci kończy się zerem umieszczonym t uż za jego zawartością, odwołanie się do znaku o indeksie równym długości napisu zwróci zero:
printf("Xd", "test"[4]); /* wypisze 0 •/
Napisy możemy wczytywać z klawiatury i wypisywać na ekran przy pomocy dobrze znanych funkcji scanf, printf i pokrewnych. Formatem używanym dla napisów jest %s.
129