Функции памяти библиотеки обработки строк — КиберПедия 

Особенности сооружения опор в сложных условиях: Сооружение ВЛ в районах с суровыми климатическими и тяжелыми геологическими условиями...

Папиллярные узоры пальцев рук - маркер спортивных способностей: дерматоглифические признаки формируются на 3-5 месяце беременности, не изменяются в течение жизни...

Функции памяти библиотеки обработки строк

2020-05-08 156
Функции памяти библиотеки обработки строк 0.00 из 5.00 0 оценок
Заказать работу

Функции библиотеки обработки строк упрощают выполнение операций с блоками памяти, сравнение блоков памяти и поиск в блоках памяти. Эти функции обращаются с блоками памяти, как с массивами символов и могут оперировать с любыми блоками данных. На рис. 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

 


Поделиться с друзьями:

Таксономические единицы (категории) растений: Каждая система классификации состоит из определённых соподчиненных друг другу...

Архитектура электронного правительства: Единая архитектура – это методологический подход при создании системы управления государства, который строится...

Общие условия выбора системы дренажа: Система дренажа выбирается в зависимости от характера защищаемого...

Папиллярные узоры пальцев рук - маркер спортивных способностей: дерматоглифические признаки формируются на 3-5 месяце беременности, не изменяются в течение жизни...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.012 с.