Fejlécfájl:
húr.hSzintaxis:
void * mempcpy (void * dest, const void * src, size_t size)Érvek:
A függvény 3 argumentumot tartalmaz:
- cél:
- src:
- méret:
Ez egy olyan memóriablokk kezdő mutatója, amelyre a memóriablokk mutat src (2. érv) másolásra kerül. A mutató érvénytelennek nyilvánul, így bármilyen típusú memóriablokk lemásolható.
Ez a forrás memória blokk kezdő mutatója, ahonnan a memória blokkot átmásolja. A mutató érvénytelennek nyilvánul, így bármilyen típusú memóriablokk lemásolható.
Ez a memória blokk mérete bájtokban.
A két mutató értéke rendeltetése és src olyannak kell lennie, hogy két memóriablokk ne fedje át egymást. A forrás és a cél memóriablokkjainak méretének legalább a következőnek kell lennie: méret (3. érv) bájtok az átfedések elkerülése érdekében. Ha a két memóriablokk átfedésben van, akkor a memcpy () funkció nincs meghatározva. Ha van átfedés lehetősége, használhatja a memmove () könyvtár funkció, ahol az átfedés jól definiálható. memmove () funkció lassabb, mint memcpy () funkció.
Értéke miatt méret, ha a forráshoz vagy a célhoz pufferhosszukon túl jutunk el, akkor a memcpy () funkció nincs meghatározva.
A memcpy () A függvény nem ellenőrzi a '\ 0' karakter befejezését.
Visszatérési értékek:
Ez a függvény visszaadja a célcím értékét rend. Mivel az értéke rendeltetése már elérhető, ezért nem kell semmilyen változóban tárolni.
Példák:
// Példa1.c#include
#include
int main ()
char src [] = "Hello";
char dest [13];
memcpy (dest, src, 6);
printf ("dest az első memcpy () =>% s \ n" után, dest);
memcpy (dest + sizeof (src) -1, "világ!", 8);
printf ("dest második memcpy () =>% s \ n" után, dest);
visszatér 0;
Az 1. példában.c két karakterből álló tömböt deklaráltunk src és rend. A méret src értéke 6 és a rendeltetése az 13. Először 6 karaktert (H), „e”, „l”, „l”, „o”, „\ 0” másoltunk src nak nek rend (11. sor). A második memcpy () függvényben 8 karakter másolt "," w "," o "," r "," l "," d ","!',' \ 0 'a célig 5 karakter után (15. sor). Képileg ezt a következőképpen tudjuk ábrázolni:
// 2. példa.c
#include
#include
int main ()
typedef struct hallgató
char * név;
int id;
int kor;
std;
std hallgató1; // Nyilvánítsd a std típusú hallgatót1
std student2; // Nyilvánítsa a st2 típusú hallgatót
// A sudent1 értékének hozzárendelése
tanuló1.név = "Bamdev Ghosh";
tanuló1.id = 1105;
tanuló1.életkor = 30;
printf ("Student1: \ n \ tNév:% s \ n \ tid:% d \ n \ tage:% d \ n", student1.név,
tanuló1.id, hallgató1.kor);
// A student1 másolása a student2-re
memcpy (& student2, & student1, sizeof (student1));
printf ("\ n \ nA memcpy után:");
printf ("\ n \ nStudent2: \ n \ tNév:% s \ n \ tid:% d \ n \ tage:% d \ n",
tanuló2.név, tanuló2.id, hallgató2.kor);
visszatér 0;
A 2. példában.c két struktúrát deklaráltunk tanuló1 és tanuló2 (15. és 16. sor). Először inicializáljuk a hallgatót1 (19., 20., 21. sor). Ezt követően használjuk memcpy hogy adatokat másoljon onnan tanuló1 nak nek tanuló2.
Következtetés:
Ebben a cikkben megtanultuk a memcpy funkció. Láttuk, hogy ez a funkció bármilyen típusú memóriablokkhoz használható, de ennek a funkciónak vannak bizonyos korlátai. Tehát óvatosan kell használnia ezt a funkciót.