Семя – орган полового размножения и расселения растений: наружи у семян имеется плотный покров – кожура...
Двойное оплодотворение у цветковых растений: Оплодотворение - это процесс слияния мужской и женской половых клеток с образованием зиготы...
Топ:
Выпускная квалификационная работа: Основная часть ВКР, как правило, состоит из двух-трех глав, каждая из которых, в свою очередь...
История развития методов оптимизации: теорема Куна-Таккера, метод Лагранжа, роль выпуклости в оптимизации...
Устройство и оснащение процедурного кабинета: Решающая роль в обеспечении правильного лечения пациентов отводится процедурной медсестре...
Интересное:
Влияние предпринимательской среды на эффективное функционирование предприятия: Предпринимательская среда – это совокупность внешних и внутренних факторов, оказывающих влияние на функционирование фирмы...
Лечение прогрессирующих форм рака: Одним из наиболее важных достижений экспериментальной химиотерапии опухолей, начатой в 60-х и реализованной в 70-х годах, является...
Наиболее распространенные виды рака: Раковая опухоль — это самостоятельное новообразование, которое может возникнуть и от повышенного давления...
Дисциплины:
2020-05-08 | 157 |
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
|
|
История развития хранилищ для нефти: Первые склады нефти появились в XVII веке. Они представляли собой землянные ямы-амбара глубиной 4…5 м...
Семя – орган полового размножения и расселения растений: наружи у семян имеется плотный покров – кожура...
Автоматическое растормаживание колес: Тормозные устройства колес предназначены для уменьшения длины пробега и улучшения маневрирования ВС при...
История создания датчика движения: Первый прибор для обнаружения движения был изобретен немецким физиком Генрихом Герцем...
© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!