Заголовочный файл:
нить.часСинтаксис:
void * mempcpy (void * dest, const void * src, size_t size)Аргументы:
Функция принимает 3 аргумента:
- dest:
- src:
- размер :
Это начальный указатель блока памяти, в котором блок памяти указывается src (2-й аргумент) будет скопирован. Указатель объявлен как void, поэтому можно скопировать любой тип блока памяти.
Это начальный указатель исходного блока памяти, откуда будет скопирован блок памяти. Указатель объявлен как void, поэтому можно скопировать любой тип блока памяти.
Это размер блока памяти в байтах.
Значение двух указателей 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 функция. Мы видели, что эту функцию можно использовать для любого типа блока памяти, но у этой функции есть некоторые ограничения. Итак, вы должны использовать эту функцию осторожно.