7 WEJŚCIE I WYJŚCIE
7.8.2 Badanie klasy znaków i ich przekształcenia
Wiele funkcji ze standardowego nagłówka <ctype.h> bada lub przekształca znaki. W następujących opisach c jest argumentem całkowitym, reprezentującym wartości typu int lub unsigned char (także EOF). Wszystkie funkcje zwracają wartość typu int; prawda oznacza wartość różną od zera.
isalpha(c)
isupper(c)
islower(c)
isdigit(c)
isalnum(c)
isspace(c)
toupper(c)
tolower(c)
prawda, jeśli c jest literą lub cyfrą; 0 - jeśli nie prawda, jeśli c jest wielką literą; 0 - jeśli nie prawda, jeśli c jest małą literą; 0 - jeśli nie prawda, jeśli c jest cyfrą; 0 - jeśli nie prawda, jeśli isalpha(c) lub isdigit(c) są prawdziwe; 0 - jeśli nie
prawda, jeśli c jest odstępem lub jednym ze znaków:
tabulacji, nowego wiersza, powrotu karetki, nowej
strony lub tabulacji pionowej
zwraca c przekształcone na wielką literę
zwraca c przekształcone na małą literę
W bibliotece standardowej występuje dość okrojona wersja funkcji ungetch, napisanej w rozdz. 4. Nazywa się tu ungetc i jest zadeklarowana następująco:
int ungetc(int c, FILE *fp)
Funkcja ungetc oddaje znak c z powrotem do pliku wskazanego przez fp i zwraca wartość znaku c lub EOF, gdy wystąpił błąd. Dla danego pliku można wycofać tylko jeden znak. Funkcję ungetc można stosować wraz z dowolną standardową funkcją wejściową, jak scanf, getc lub getchar.
Funkcja system(char *s) wykonuje polecenie zawarte w argumencie s, po czym wznawia wykonywanie bieżącego programu. Zawartość s ściśle zależy od lokalnego systemu operacyjnego. Banalnym przykładem pochodzącym z systemu Unix jest instrukcja
system(”date”);
która uruchamia program datę wypisujący do standardowego wyjścia aktualną dat? i czas. Funkcja system zwraca zależną od systemu wartość całkowitą opisującą stan.
z jakim zakończyło się uruchomione polecenie. W systemie Unix wa wartość zwracana przez funkcję exit.
Standardowe funkcje malloc i calloc dynamicznie pobierają od systemu żądane bloki pamięci.
void *malloc(sizeJ n)
Funkcja malloc zwraca wskaźnik do n bajtów nie zainicjowanej pamięci albo NULL, jeśli żądanie nie może być spełnione.
void *calloc(size_t n, size_t size)
Funkcja calloc zwraca wskaźnik do obszaru mogącego pomieścić tablicę n elementów podanego rozmiaru size. Funkcja zwraca NULL, jeżeli żądania nie można spełnić. Przydzielona pamięć jest inicjowana zerami.
Zwracany przez obie funkcje wskaźnik pokazuje na obszar pamięci położony zgodnie z wymaganiami danego obiektu, ale wartość tego wskaźnika należy zrzutować na właściwy typ, jak w następującym przykładzie:
int *ip;
ip = (int *) calloc(n, sizeof(int));
Funkcja free(p) zwalnia pamięć wskazywaną przez p, przy czym wartość p musi być wynikiem wcześniejszego wywołania funkcji malloc lub calloc. Nie ma ograniczeń dotyczących kolejności zwalniania pamięci. Okropnym za to błędem jest zwalnianie czegoś, co nie było uprzednio przydzielone za pomocą funkcji malloc lub calloc.
Błędem jest także używanie czegoś, co już zostało zwolnione. Typowym - i niepoprawnym - fragmentem programu jest następująca pętla, która zwalnia bloki pamięci powiązane w łańcuch:
for (p = head; p != NULL; p = p->next) /* ŹLE */ free(p);
Poprawną metodą jest przechowanie wszystkiego, co jeszcze będzie potrzebne, przed zwolnieniem obszaru pamięci:
for (p = head; p 1= NULL; p = q) { q = p->next; free(p);
}
223