Двойное оплодотворение у цветковых растений: Оплодотворение - это процесс слияния мужской и женской половых клеток с образованием зиготы...
Биохимия спиртового брожения: Основу технологии получения пива составляет спиртовое брожение, - при котором сахар превращается...
Топ:
Особенности труда и отдыха в условиях низких температур: К работам при низких температурах на открытом воздухе и в не отапливаемых помещениях допускаются лица не моложе 18 лет, прошедшие...
Основы обеспечения единства измерений: Обеспечение единства измерений - деятельность метрологических служб, направленная на достижение...
Интересное:
Принципы управления денежными потоками: одним из методов контроля за состоянием денежной наличности является...
Влияние предпринимательской среды на эффективное функционирование предприятия: Предпринимательская среда – это совокупность внешних и внутренних факторов, оказывающих влияние на функционирование фирмы...
Мероприятия для защиты от морозного пучения грунтов: Инженерная защита от морозного (криогенного) пучения грунтов необходима для легких малоэтажных зданий и других сооружений...
Дисциплины:
|
из
5.00
|
Заказать работу |
Содержание книги
Поиск на нашем сайте
|
|
|
|
Функции библиотеки обработки строк упрощают выполнение операций с блоками памяти, сравнение блоков памяти и поиск в блоках памяти. Эти функции обращаются с блоками памяти, как с массивами символов и могут оперировать с любыми блоками данных. На рис. 30 приведен перечень функций памяти библиотеки обработки строк.
Параметры-указатели для этих функций объявляются как void *. Указатель любого типа данных может быть прямо присвоен указателю типа void *, и наоборот — указатель void * может прямо быть присвоен указателю на любой тип данных. Поэтому обсуждаемые функции могут получать в качестве параметра указатель на любой тип данных. Поскольку указатель типа void * не может быть разыменован, каждая функция получает дополнительный аргумент, определяющий число символов (байтов), которое будет обрабатывать функция.
| Прототип | Описание функции |
| void * memcpy (void *sl, const void *s2, size_t n) | |
| Копирует n символов из объекта, указываемого s2, в объект, указываемый s1 Функция возвращает указатель, ссылающийся на результирующий объект. | |
| void *memmove (void *sl, const void *s2, size t n) | |
| Копирует n символов из объекта, указываемого s2, в объект, указываемый s1. Копирование выполняется последовательно: символы из объекта, указываемого s2, копируются во временный массив и затем из временного массива копируются в объект, указываемый s1. Функция возвращает указатель, ссылающийся на результирующий объект. | |
| void *memcmp (const void *sl, const void *s2, size_t n) | |
| Сравнивает первые n символов объектов, указываемых s1 и s2. Функция возвращает значения 0, меньше 0 и больше 0, если s1 соответственно равен, меньше или больше чем s2. | |
| void *memchr (const void *s, int c, size t n) | |
| Выполняет поиск первого вхождения с (преобразованного в тип unsigned char) в первых п символах объекта, указываемого s. Если с найден, возвращает указатель на с в объекте. В противном случае возвращает NULL. | |
| void *memset (const void *s, int c, size t n) | |
| Копирует с (преобразованный в тип unsigned char) в первые n символов объекта, указываемого s. Возвращает указатель результата. | |
Рис. 30. Функции памяти из библиотеки обработки строк
Функция memcpy копирует определенное число символов из объекта, на который ссылается ее второй аргумент, в объект, на который ссылается первый аргумент. Функция может получать указатель на любой тип объекта. Поведение этой функции не определено в том случае, если два объекта перекрываются в памяти, т.е. являются частями одного и того же объекта. Программа, приведенная на рис. 31, использует memcpy для копирования строки, содержащейся в массиве s2, в массив s1.
/* Применение memcpy */
#include <stdio.h>
#include <string.h>
main () {
char si [22], s2[] = "Copy this string";
memcpy (si, s2, 17);
printf("%s\n%s\"%s\"\n", "After s2 is copied into si with memcpy,", "s1 contains ", si);
return 0; }
Вывод на экран
After s2 is copied into si with memcpy, s1 contains "Copy this string"
Рис. 31. Применение memcpy
Функция memmove, как и функция memcpy, копирует определенное число байтов из объекта, на который ссылается ее второй аргумент, в объект, на который ссылается первый аргумент. Сначала функция копирует заданное число байтов из второго аргумента во временный символьный массив, а затем копирует этот массив в первый аргумент. Такой способ позволяет копировать символы из одной части строки в другую часть той же самой строки.
Программа, приведенная на рис. 32, использует функцию memmove для копирования последних 10-ти байтов массива х в первые 10 байтов того же массива х.
/* Применение memmove */
#include <stdio.h>
# include <string.h>
main () {
char x[] = "Home Sweet Home";
printf("%s%s\n", “The String in array x before memmove is: ", x);
printf ("%s%s\n", " The string in array x before memmove is: ", memmove (x, &x[5], 10));
return 0;}
Вывод на экран
The string in array x before memmove is:
Home Sweet Home.'f'
The string in array x before memmove is:
Sweet Home Home
Рис. 32. Применение memmove
Функция тетстр (рис. 33) сравнивает определенное число символов первого аргумента с соответствующими символами второго аргумента. Функция возвращает значение больше 0, если первый аргумент больше второго аргумента, возвращает 0, если аргументы равны, и возвращает значение меньше 0, если первый аргумент меньше второго.
/* Применение memcmp */
#include <stdio.h>
#include <string.h>
main () {
char sl[] = "ABCDEFG", s2[] = "ABCDXYZ";
printf("%s%s\n%s%s\n\n%s%2d\n%s%2d\n%s%2d\n", "s1 = ", s1, "s2 = ", s2,
"memcmp(si, s2, 4) = ", memcmp(s1, s2, 4),
"memcmp(si, s2, 7) = ", memcmp(s1, s2, 7),
"memcmp(s2, si, 7) = ", memcmp(s2, s1, 7));
return 0;
}
Вывод на экран
S1 = ABCDEFG s2 = ABCDXYZ
memcmp(s1, s2, 4) = 0 memcmp(s1, s2, 7) = -1 memcmp(s2, si, 7) = 1
Рис. 33. Применение memcpy
Функция memchr выполняет поиск байта (до первого положительного результата), представленного типом unsigned char, в заданном числе байтов объекта. Если заданный байт найден, функция возвращает указатель на найденный байт объекта. В противном случае функция возвращает указатель со значением NULL. Программа, приведенная на рис. 34, выполняет поиск символа (байта) 'r' в строке "This is a string".
/* Применение memchr */
#include <stdio.h>
# include <string.h>
main () {
char *s = "This is a string";
printf ("%s\'%c\'%s\"%s\"\n",
"The remainder of s after character ", 'r1, " is found is ", memchr(s, 'r', 16));
return 0; }
Вывод на экран
The remainder of s after character 'r' is "ring"
Рис. 34. Применение memchr
Функция memset копирует значение байта второго аргумента в определенное число байтов объекта, на который указывает первый аргумент. Программа, приведенная на рис. 35, использует функцию memset для копирования "B" в первые 7 байтов string1.
/* Применение memset */
#include <stdio.h>
#include <string.h>
main () {
char string1[15] = "BBBBBBBBBBBBBB";
printf ("string1 = %s\n", stringl);
printf ("string1 после memset = %s\n",
memset(string1, 'b', 7));
return 0; }
Вывод на экран
stringl = BBBBBBBBBBBBBB
stringi после memset = bbbbbbbBBBBBBB
Рис. 35. Применение memset
|
|
|
Кормораздатчик мобильный электрифицированный: схема и процесс работы устройства...
Автоматическое растормаживание колес: Тормозные устройства колес предназначены для уменьшения длины пробега и улучшения маневрирования ВС при...
Опора деревянной одностоечной и способы укрепление угловых опор: Опоры ВЛ - конструкции, предназначенные для поддерживания проводов на необходимой высоте над землей, водой...
Архитектура электронного правительства: Единая архитектура – это методологический подход при создании системы управления государства, который строится...
© cyberpedia.su 2017-2026 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!