Работа с областями памяти и строками
В стандартной библиотеке есть специальная группа Функций для обработки областей памяти, которые рассматриваются как последовательности байтов.
Если размер области, с которой необходимо работать, задается явно, будем называть такую область буфером.
Другое используемое понятие — строка. Отличие строки от буфера в том, что ее размер задается не явно, а определяется первым встретившимся при просмотре строки слева направо нулевым байтом (имеющим значение '\0'), причем считается, что этот нулевой байт также принадлежит строке.
Для копирования буферов, для присваивания каждому байту в пределах указанного буфера заданного значения и для сравнения содержимого двух буферов предназначены следующие функции:
Функция | Краткое описание | ||
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 |
преобразовать строку в верхний регистр (заглавные буквы) |
Прототипы всех функций работы со строками содержатся в файле string.h. Все функции работают со строками, завершающимися нулевым байтом ('\0'). Для работы с массивом символов, не имеющим в конце нулевого байта, вы можете использовать функции преобразования буферов, описанные выше.