Книга: Язык программирования Си для персонального компьютера

Работа с областями памяти и строками

Работа с областями памяти и строками

В стандартной библиотеке есть специальная группа Функций для обработки областей памяти, которые рассматриваются как последовательности байтов.

Если размер области, с которой необходимо работать, задается явно, будем называть такую область буфером.

Другое используемое понятие — строка. Отличие строки от буфера в том, что ее размер задается не явно, а определяется первым встретившимся при просмотре строки слева направо нулевым байтом (имеющим значение ''), причем считается, что этот нулевой байт также принадлежит строке.

Для копирования буферов, для присваивания каждому байту в пределах указанного буфера заданного значения и для сравнения содержимого двух буферов предназначены следующие функции:

Функция Краткое описание
memccpy копирует символы из одного буфера в другой до тех пор, пока не будет скопирован заданный символ или не будет скопировано определенное число символов
memchr возвращает указатель на первое вхождение заданного символа в буфере
memcmp сравнивает указанное число символов из двух буферов
memlcmp сравнивает указанное число символов двух буферов, считая строчные и прописные буквы эквивалентными
memcpy копирует указанное количество символов из одного буфера в другой
memset инициализирует заданным значением указанное количество байтов в буфере
movedata копирует определенное количество символов из одного буфера в другой, даже когда буфера находятся в разных сегментах

Прототипы перечисленных функций содержатся в файле memory.h (MSC) и в файлах mem.h и string.h (ТС).

Система программирования ТС предоставляет дополнительно следующие функции для работы с буферами:

Функция Краткое описание
memove копирует указанное количество символов из одного буфера в другой
movmem копирует указанное количество символов из одного буфера в другой
setmem инициализирует заданным значением указанное количество байтов в буфере

Прототипы функций memmove и movmem содержатся в файлах mem.h и string.h. Прототип функции setmem содержится в файле mem.h.

Для работы со строками существуют следующие библиотечные функции (ТС & MSC):

Функция Краткое описание
strcat катенация (склеивание) строк
strchr найти первое вхождение заданного символа в строке
strcmp сравнить две строки
strcpy копировать одну строку в другую
strcspn найти первое вхождение символа из заданного набора символов в строке
strdup дублирование строки
strerror сформировать в строке сообщение об ошибке, состоящее из двух частей: системной диагностики и необязательного добавочного пользовательского сообщения
stricmp сравнить две строки, считая символы нижнего и верхнего регистров эквивалентными
strlen вычислить длину строки
strlwr преобразовать строку в нижний регистр (строчные буквы)
strncat добавить n символов в строку
strncmp сравнение n символов в двух строках
strncpy скопировать n символов из одной строки в другую
strnicmp сравнение n символов двух строк
strnset установить n символов в строке в заданное значение
strpbrk найти первое вхождение любого символа из заданного набора в строке
strrchr найти последнее вхождение заданного символа в строке
strrev инвертировать (перевернуть) строку
strset установить все символы строки в заданное значение
strspn найти первую подстроку из заданного набора символов в строке
strstr найти первую подстановку одной строки (более короткой) в другой
strtok найти следующую точку в строке
strupr преобразовать строку в верхний регистр (заглавные буквы)

Кроме того, система программирования MSC предоставляет дополнительно функцию strcmpi (идентична функции stricmp), а система программирования ТС предоставляет функцию stpcpy (идентична функции strcpy, но возвращает в точку вызова другое значение).

Прототипы всех функций работы со строками содержатся в файле string.h. Все функции работают со строками, завершающимися нулевым байтом (''). Для работы с массивом символов, не имеющим в конце нулевого байта, вы можете использовать функции преобразования буферов, описанные выше.

Оглавление книги


Генерация: 1.674. Запросов К БД/Cache: 3 / 0
поделиться
Вверх Вниз