Программирование на C

Как использовать функцию memcpy на языке C?

Как использовать функцию memcpy на языке C?
В языке C функция memcpy () используется для копирования блока памяти из одного места в другое. В этой статье мы подробно обсудим, как используется функция memcpy (). Итак, приступим.

Заголовочный файл:

нить.час

Синтаксис:

void * mempcpy (void * dest, const void * src, size_t size)

Аргументы:

Функция принимает 3 аргумента:

  1. dest:
  2. Это начальный указатель блока памяти, в котором блок памяти указывается src (2-й аргумент) будет скопирован. Указатель объявлен как void, поэтому можно скопировать любой тип блока памяти.

  3. src:
  4. Это начальный указатель исходного блока памяти, откуда будет скопирован блок памяти. Указатель объявлен как void, поэтому можно скопировать любой тип блока памяти.

  5. размер :
  6. Это размер блока памяти в байтах.

Значение двух указателей dest а также src должен быть таким, чтобы два блока памяти не перекрывались. Размер блоков памяти источника и назначения должен быть не менее размер (3-й аргумент) байты, чтобы избежать дублирования ситуаций. Если два блока памяти перекрываются, то поведение memcpy () функция не определена. Когда есть вероятность перекрытия, вы можете использовать memmove () библиотечная функция, где четко определено перекрытие. memmove () функция медленнее по сравнению с memcpy () функция.

Из-за ценности размер, если доступ к источнику или получателю превышает длину их буфера, то поведение memcpy () функция не определена.

В memcpy () функция не проверяет завершение символа '\ 0'.

Возвращаемые значения:

Эта функция возвращает значение адреса назначения dest. Как ценность dest уже доступен, поэтому его не нужно хранить ни в какой переменной.

Примеры:

// Пример1.c
#включать
#включать
int main ()

char src [] = "Привет";
char dest [13];
memcpy (dest, src, 6);
printf ("пункт назначения после первого memcpy () =>% s \ n", пункт назначения);
memcpy (dest + sizeof (src) -1, "мир!", 8);
printf ("пункт назначения после второго memcpy () =>% s \ n", пункт назначения);
возврат 0;

В Example1.c мы объявили двухсимвольный массив src а также dest. Размер src 6 и dest 13 лет. Сначала мы скопировали 6 символов 'H', 'e', ​​'l', 'l', 'o', '\ 0' из src к dest (Строка 11). Во второй функции memcpy () скопировано 8 символов ", 'w', 'o', 'r', 'l', 'd', '!',' \ 0 'до места назначения после 5 символов (строка 15). Графически это можно представить следующим образом:

// Пример2.c
#включать
#включать
int main ()

typedef struct student

название символа;
int id;
int age;
std;
std student1; // Объявление student1 типа std
std student2; // Объявление student2 типа std
// Присваиваем значение sudent1
студент1.name = "Бамдев Гош";
студент1.id = 1105;
студент1.возраст = 30;
printf ("Student1: \ n \ tName:% s \ n \ tid:% d \ n \ tage:% d \ n", student1.название,
студент1.id, student1.возраст);
// Копируем student1 в student2
memcpy (& student2, & student1, sizeof (student1));
printf ("\ n \ nПосле memcpy:");
printf ("\ n \ nStudent2: \ n \ tName:% s \ n \ tid:% d \ n \ tage:% d \ n",
студент2.имя, студент2.id, student2.возраст);
возврат 0;

В Example2.c мы объявили две структуры студент1 а также студент2 (Строки 15 и 16). Сначала мы инициализируем student1 (строки 19, 20, 21). После этого мы используем memcpy копировать данные из студент1 к студент2.

Заключение:

В этой статье мы узнали, как использовать memcpy функция. Мы видели, что эту функцию можно использовать для любого типа блока памяти, но у этой функции есть некоторые ограничения. Итак, вы должны использовать эту функцию осторожно.

Лучшие игры с отслеживанием рук
Oculus Quest недавно представил отличную идею отслеживания рук без контроллеров. С постоянно растущим числом игр и действий, которые осуществляются фо...
Как показать наложение OSD в полноэкранных приложениях и играх Linux
Игра в полноэкранные игры или использование приложений в полноэкранном режиме без отвлекающих факторов может отрезать вас от соответствующей системной...
Топ-5 карт для захвата игр
Все мы видели и любили потоковые игры на YouTube. PewDiePie, Jakesepticye и Markiplier - лишь некоторые из лучших игроков, которые заработали миллионы...

Свежие статьи об операционных системах. Множество интересных гайдов и полезных советов. Почувствуйте себя своим в мире современных технологий