Язык программирования Си. Издание 3-е, исправленное
Шрифт:
7.8.1 Операции со строками
Мы уже упоминали функции strlen, strcpy, strcat и strcmp, описание которых даны в ‹string.h›. Далее, до конца пункта, предполагается, что s и t имеют тип char *, c и n– тип int.
strcat(s,t)– приписывает t в конец s.
strncat(s,t,n)–
strcmp(s,t)– возвращает отрицательное число, нуль или положительное число для s ‹ t, s - t или s › t, соответственно.
strncmp(s,t,n)– делает то же, что и strcmp, но количество сравниваемых символов не может превышать n
strcpy(s,t)– копирует t в s.
strncpy(s,t,n)– копирует не более n символов из t в s.
strlen(s)– возвращает длину s.
strchr(s,c)– возвращает указатель на первое появление символа c в s или, если c нет в s, NULL.
strrchr(s,c)– возвращает указатель на последнее появление символа c в s или, если c нет в s, NULL.
7.8.2 Анализ класса символов и преобразование символов
Несколько функций из библиотеки ‹ctype.h› выполняют проверки и преобразование символов. Далее, до конца пункта, переменная c– это переменная типа int, которая может быть представлена значением unsigned, char или EOF. Все эти функции возвращают значения типа int.
isalpha(c)– не нуль, если c– буква; 0 в противном случае.
isupper(c)– не нуль, если c– буква верхнего регистра; 0 в противном случае.
islower(c)– не нуль, если c– буква нижнего регистра; 0 в противном случае.
isdigit(c)– не нуль, если c– цифра; 0 в противном случае.
isalnum(c)– не нуль, если или isalpha(c), или isdigit(c) истинны; 0 в противном случае.
isspace(c)– не нуль, если c– символ пробела, табуляции, новой строки, возврата каретки, перевода страницы, вертикальной табуляции.
toupper(c)– возвращает c, приведенную к верхнему регистру.
tolower(c)– возвращает c, приведенную к нижнему регистру.
7.8.3
Функция ungetcВ стандартной библиотеке содержится более ограниченная версия функции ungetch по сравнению с той, которую мы написали в главе 4. Называется она ungetc. Эта функция, имеющая прототип
отправляет символ c назад в файл fp и возвращает c, а в случае ошибки EOF. Для каждого файла гарантирован возврат не более одного символа. Функцию ungetc можно использовать совместно с любой из функций ввода вроде scanf, getc, getchar и т. д.
7.8.4 Исполнение команд операционной системы
Функция system(char *s) выполняет команду системы, содержащуюся в строке s, и затем возвращается к выполнению текущей программы.
Содержимое s, строго говоря, зависит от конкретной операционной системы. Рассмотрим простой пример: в системе UNIX инструкция
вызовет программу date, которая направит дату и время в стандартный вывод. Функция возвращает зависящий от системы статус выполненной команды. В системе UNIX возвращаемый статус - это значение, переданное функцией exit.
7.8.5 Управление памятью
Функции malloc и calloc динамически запрашивают блоки свободной памяти. Функция malloc
возвращает указатель на n байт неинициализированной памяти или NULL, если запрос удовлетворить нельзя. Функция calloc
возвращает указатель на область, достаточную для хранения массива из n объектов указанного размера (size), или NULL, если запрос не удается удовлетворить. Выделенная память обнуляется.
Указатель, возвращаемый функциями malloc и calloc, будет выдан с учетом выравнивания, выполненного согласно указанному типу объекта. Тем не менее к нему должна быть применена операция приведения к соответствующему типу (Как уже отмечалось (см. примеч. в параграфе 6.5), замечания о приведении типов значений, возвращаемых функциями malloc или calloc, - неверно.
– Примеч. авт.), как это сделано в следующем фрагменте программы:
Функция free(p) освобождает область памяти, на которую указывает p, - указатель, первоначально полученный с помощью malloc или calloc. Никаких ограничений на порядок, в котором будет освобождаться память, нет, но считается ужасной ошибкой освобождение тех областей, которые не были получены с помощью calloc или malloc.