Заглавен файл:
низ.зСинтаксис:
void * mempcpy (void * dest, const void * src, size_t size)Аргументи:
Функцията отнема 3 аргумента:
- дестинация:
- src:
- размер:
Това е начален указател на блок памет, където блокът памет, посочен от src (2-ри аргумент) ще бъде копиран. Показалецът е деклариран като void, така че всеки тип блок памет може да бъде копиран.
Това е начален указател на блока памет източник, откъдето блокът памет ще бъде копиран. Показалецът е деклариран като void, така че всеки тип блок памет може да бъде копиран.
Това е размерът на блока памет в байтове.
Стойността на двата указателя дест и src трябва да бъде по такъв начин, че два блока памет да не се припокриват. Размерът на блоковете памет на източника и местоназначението трябва да бъде поне размер (3-ти аргумент) байта, за да се избегнат припокриващи се ситуации. Ако двата блока памет се припокриват, тогава поведението на memcpy () функция е недефинирана. Когато има възможност за припокриване, можете да използвате memmove () библиотечна функция, където припокриването е добре дефинирано. memmove () функцията е по-бавна в сравнение с memcpy () функция.
Поради стойността на размер, ако източникът или местоназначението са достъпни извън тяхната дължина на буфера, тогава поведението на memcpy () функция е недефинирана.
The memcpy () функцията не проверява за прекратяване на символ \ \ 0.
Върнати стойности:
Тази функция връща стойността на адреса на местоназначението дест. Като стойността на дест вече е наличен, така че не е необходимо да се съхранява в която и да е променлива.
Примери:
// Пример1.° С#include
#include
int main ()
char src [] = "Здравейте";
char dest [13];
memcpy (dest, src, 6);
printf ("dest след първата memcpy () =>% s \ n", dest);
memcpy (dest + sizeof (src) -1, "свят!", 8);
printf ("dest след втори memcpy () =>% s \ n", dest);
връщане 0;
В Пример1.c декларирахме двусимволен масив src и дест. Размерът на src е 6 и дест е 13. Първо копирахме 6 знака „H“, „e“, „l“, „l“, „o“, „\ 0“ от src да се дест (Ред 11). Във втората функция memcpy () са копирани 8 знака ", 'w', 'o', 'r', 'l', 'd', '!',' \ 0 'до дестинацията след 5 знака (ред 15). Нагледно можем да представим това по следния начин:
// Пример2.° С
#include
#include
int main ()
typedef struct студент
char * име;
int id;
int възраст;
std;
std студент1; // Деклариране на student1 от тип std
std студент2; // Деклариране на студент2 от тип std
// Присвояване на стойността на sudent1
студент1.name = "Bamdev Ghosh";
студент1.id = 1105;
студент1.възраст = 30;
printf ("Student1: \ n \ tName:% s \ n \ tid:% d \ n \ tage:% d \ n", студент1.име,
студент1.id, студент1.възраст);
// Копиране на student1 в student2
memcpy (& student2, & student1, sizeof (student1));
printf ("\ n \ nСлед memcpy:");
printf ("\ n \ nУченик2: \ n \ tИме:% s \ n \ tid:% d \ n \ tage:% d \ n",
студент2.име, ученик2.id, студент2.възраст);
връщане 0;
В Пример2.c декларирахме две структури студент1 и студент2 (Ред 15 и 16). Първо инициализираме student1 (Редове 19, 20, 21). След това използваме memcpy за копиране на данни от студент1 да се студент2.
Заключение:
В тази статия научихме как да използваме memcpy функция. Видяхме, че тази функция може да се използва за всеки тип блок памет, но тази функция има някои ограничения. Така че, трябва внимателно да използвате тази функция.