39008

39008



131


ŁAŃCUCHY ZNAKÓW W JĘZYKU C

Należy cały czas pamiętać, że napis jest tak naprawdę tablicą. Jeśli zarezerwowaliśmy dla napisu 80 znaków, to przypisanie do niego dłuższego napisu spowoduje pisanie po pamięci.

Uwaga! Deklaracja char -tekst ■ cokolwiek; oraz char tekst ■ cokolwiek; pomimo, że wyghplają bardzo podobnie bardzo się od siebie różnią. W przypadku pierwszej deklaracji próba zmodyfikowania napisu (np. tekst [0] = ’C’;) może mieć nieprzyjemne skutki. Dzieje

się tak dlatego, że char -tekst = cokolwiek; deklaruje wskaźnik na stały obszar |Nimięci i

Pisanie po pamięci może czasami skończyć się błędem <lostępu do pamięci ("segment at ion fault" w systemach UNIX) i zamknięciem programu, jednak może zdarzyć się jeszcze gorsza ewentualność możemy zmienić w ten sposób przypadkowo wartość innych zmiennych. Program zacznie wtedy zachowywać się nieprzewidywalnie zmienne a nawet stale, co do których zakładaliśmy, że ich wartość liędzie ściśle ustalona, mogą przyjąć tuką wartość, jaka absolutnie nie powinna mieć miejsca. Warto więc stosować zaliezpieczenia typu makra assert.

Kluczowy jest też kończący napis znak nuli. W zasadzie wszystkie funkcje operujące na napisach opierają właśnie na nim. Na przykład, strlen szuka rozmiaru napisu idąc od początku i zliczając znaki, aż nie natrafi na zimk o kodzie zero. Jeśli nasz napis nie kończy się znakiem nuli. funkcja będzie szła dalej po pamięci. Na szczęście, wszystkie operacje podstawienia typu tekst = “Tekst" |M>wodują zakończenie napisu nullem (o ile jest na niego miejsce)

Znaki specjalne

Jak zapewne zauważyłeś w popr/idnim przykładzie, w łańcuchu ostatnim znakiem jest znak o wartości zen) ('\0'). Jednak łańcuchy mogą zawierać ima* znaki specjalne(sekwencje stertyące), np.:

•    '\a* - alarm (sygnał akustyczny terminala)

•    ‘\b‘ - backspace (usuwa poprzedzający znak)

•    ’\f’ * wysuniecie strony (np. w drukarce)

•    ’\r* - powrót kursora (kanaki) do |M>czątku wiersza

•    ’\n’ - znak nowego wiersza

•    - cudzysłów

•    ’\” - apostrof

•    ’\\’ - ukośnik wsteczny (backslash)

•    ’\t’ - tabulacja pozioma

•    V * tabulacja pionowa

•    ’\?’ - znak zapytania (pytajnik)

•    ’\ooo' - liczba zapisana w systemie oktalnym (ósemkowym), gdzie ’ooo’ należy zastąpić trzycyfrową liczbą w tym systemie

•    ’\xhh‘ - liczlxa zapisana w systemie heksadecymalnym (szesnastkowym), gilzie ’hh’ należy zastąpić dwucyfrową liczbą w tym systemie

•    ’\unnnn’ - uniwersalna nazwa znaku, gdzie ’nnnn’ należy zastąpić czterocyfrowym identyfikatorem znaku w systemie szesnatkowym. ’nnnn' odpowiada dłuższej formie w postaci ‘OOOOnnnn’

•    ’\uunnnnnnn' - uniwersalna nazwa znaku, gilzie 'nnnunnnn' należy zastąpić ośmiocy-frowym identyfikatorem znaku w systemie szesnatkowym.

'Można się zatem zastanawiać czemu kompilator dopuszcza przypisanie do zwykłego wskaźnika wskazania na stały obszar, skoro kod const int -foo; lnt -bar - foo; generuje ostrzeżenie lub wręcz się nie kompiluje. Jest to |>ewna zaszłość historyczna wynikająca, z faktu, że słówko const zostało wprowadzone do języka, gdy już ł>yl on w powszechnym użyciu.

2N»e należy mylić znaku nuli (czyli znaku o kodzie zero) ze wskaźnikiem nuli (czy też NULL).



Wyszukiwarka

Podobne podstrony:
File0001 Należy pamiętać, że MUZYKOTERAPIA: jest dziedziną nauki, ponieważ swoje podstawy opiera na
Należy przy tym pamiętać, że morfologia kolonii zależy nie tylko od rodzaju mikroorganizmu, ale równ
File0001 Należy pamiętać, że MUZYKOTERAPIA: jest dziedziną nauki, ponieważ swoje podstawy opiera na
4 (94) 136 Lilianna Kostańska fera dominowała w większości rodzin. Należy przy tym pamiętać, że z po
3 Nawet jeśli poszkodowany jest przytomny, należy cały czas(do momentu dowiezienia do szpitala) stab
Rozdział 7 Powyższe nie oznacza jednak, że można opis zastąpić rysunkiem. Pamiętajmy, że praca jest
81896 IMGT45 78 i sztoki” (pamiętajmy, że postępowy jest tylko socrealizm i ci twórcy, którzy przez
03trudne nietrudne •    Zajęcia prowadzi stale ta sama osoba. Pamiętamy, że ważny jes
Potrzeba rycerskości
Syst Finansowy081 Analizując płynność banku należy uwzględnić zwłaszcza to, że: •    
Slajd18 Nagrody Warto pamiętać, że nagroda jest konsekwencją pozytywną, co oznacza, że powinna
Paula Erotyczne Przygody Poczatkujacej Stewardesy str42 PRZYSTOJNIAKU! WOLNO TU WCHOPZIt? ALE P

więcej podobnych podstron