|
Ввод и вывод
7.9. Несколько разнообразных функций
Стандартная библиотека предоставляет множество разнообразных функций, некоторые из которых оказываются особенно полезными. Мы уже упоминали функции для работы со строками: strlen, strcpy, strcat и strcmp. Вот некоторые другие.
7.9.1. Проверка вида символов и преобразования
Некоторые макросы выполняют проверку символов и преобразования:
isalpha(c) не 0, если "c" алфавитный символ, 0 - если нет. isupper(c) Не 0, если "c" буква верхнего регистра, 0 - если нет. islower(c) Не 0, если "c" буква нижнего регистра, 0 - если нет. isdigit(c) Не 0, если "c" цифра, 0 - если нет. isspace(c) Не 0, если "c" пробел, табуляция или новая строка, 0 - если нет. toupper(c) Преобразует "c" в букву верхнего регистра. tolower(c) Преобразует "c" в букву нижнего регистра.
7.9.2. Функция UNGETC
Стандартная библиотека содержит довольно ограниченную версию функции ungetch, написанной нами в "лекции №4" ; она называется ungetc. В результате обращения
ungetc(c,fp)
символ "C" возвращается в файл fp. Позволяется возвращать в каждый файл только один символ. функция ungetc может быть использована в любой из функций ввода и с макросами типа scanf, getc или getchar.
7.9.3. Обращение к системе
функция system(s) выполняет команду, содержащуюся в символьной строке s, и затем возобновляет выполнение текущей программы. Содержимое s сильно зависит от используемой операционной системы. В качестве тривиального примера, укажем, что на системе UNIX строка
system("date");
приводит к выполнению программы date, которая печатает дату и время дня.
7.9.4. Управление памятью
функция calloc весьма сходна с функцией alloc, использованной нами в предыдущих лекциях. В результате обращения
calloc(n, sizeof(object))
возвращается либо указатель пространства, достаточного для размещения n объектов указанного размера, либо null, если запрос не может быть удовлетворен. Отводимая память инициализируется нулевыми значениями.
указатель обладает нужным для рассматриваемых объектов выравниванием, но ему следует приписывать соответствующий тип, как в
char *calloc(); int *ip; ip=(int*) calloc(n,sizeof(int));
функция cfree(p) освобождает пространство, на которое указывает "p", причем указатель "p" первоначально должен быть получен в результате обращения к calloc. Здесь нет никаких ограничений на порядок освобождения пространства, но будет неприятнейшей ошибкой освободить что-нибудь, что не было получено обращением к calloc.
Реализация программы распределения памяти, подобной calloc, в которой размещенные блоки могут освобождаться в произвольном порядке, продемонстрирована в "лекции №8" .