Datoteka zaglavlja:
niz.hSintaksa:
void * mempcpy (void * dest, const void * src, size_t size)Argumenti:
Funkcija uzima 3 argumenta:
- dest:
- src:
- veličina:
Ovo je početni pokazivač memorijskog bloka tamo gdje je memorijski blok označen src (2. argument) će se kopirati. Pokazivač je proglašen praznim, tako da se može kopirati bilo koja vrsta memorijskog bloka.
Ovo je početni pokazivač izvornog memorijskog bloka odakle će se memorijski blok kopirati. Pokazivač je proglašen praznim, tako da se može kopirati bilo koja vrsta memorijskog bloka.
Ovo je veličina memorijskog bloka u bajtovima.
Vrijednost dva pokazivača dest i src trebao biti na takav način da se dva memorijska bloka ne preklapaju. Veličina memorijskih blokova izvora i odredišta mora biti najmanje veličina (3. argument) bajtova kako bi se izbjeglo preklapanje situacija. Ako se dva memorijska bloka preklapaju, tada se ponašanje memcpy () funkcija je nedefinirana. Kada postoji mogućnost preklapanja, možete koristiti memmove () funkcija knjižnice gdje je preklapanje dobro definirano. memmove () funkcija je sporija u odnosu na memcpy () funkcija.
Zbog vrijednosti veličina, ako se izvoru ili odredištu pristupa preko njihove duljine međuspremnika, tada se ponašanje memcpy () funkcija je nedefinirana.
The memcpy () funkcija ne provjerava završava li znak \ \ 0.
Povratne vrijednosti:
Ova funkcija vraća vrijednost odredišne adrese dest. Kao vrijednost dest je već dostupan, pa ga ne treba pohraniti ni u jednu varijablu.
Primjeri:
// Primjer1.c#include
#include
int main ()
char src [] = "Pozdrav";
char dest [13];
memcpy (dest, src, 6);
printf ("dest nakon prve memcpy () =>% s \ n", dest);
memcpy (dest + sizeof (src) -1, "svijet!", 8);
printf ("dest nakon druge memcpy () =>% s \ n", dest);
return 0;
U Primjeru1.c proglasili smo niz od dva znaka src i dest. Veličina src je 6 i dest je 13. Prvo smo kopirali 6 znakova 'H', 'e', 'l', 'l', 'o', '\ 0' iz src do dest (Redak 11). U drugoj funkciji memcpy () kopirano je 8 znakova ", 'w', 'o', 'r', 'l', 'd', '!',' \ 0 'na dest nakon 5 znakova (redak 15). Slikovito to možemo prikazati na sljedeći način:
// Primjer2.c
#include
#include
int main ()
typedef struct student
char * ime;
int id;
int doba;
std;
std student1; // Deklariraj student1 tipa std
std student2; // Proglasiti student2 tipa std
// Dodjela vrijednosti sudent1
student1.name = "Bamdev Ghosh";
student1.id = 1105;
student1.dob = 30;
printf ("Student1: \ n \ tName:% s \ n \ tid:% d \ n \ taga:% d \ n", student1.Ime,
student1.id, student1.dob);
// Kopiraj student1 u student2
memcpy (& student2, & student1, veličina (student1));
printf ("\ n \ nNakon memcpy:");
printf ("\ n \ nUčenik2: \ n \ tName:% s \ n \ tid:% d \ n \ tag:% d \ n",
student2.ime, student2.id, student2.dob);
return 0;
U Primjeru2.c proglasili smo dvije strukture student1 i student2 (Redak 15 i 16). Prvo inicijaliziramo student1 (retci 19, 20, 21). Nakon toga koristimo memcpy za kopiranje podataka iz student1 do student2.
Zaključak:
U ovom smo članku naučili kako koristiti memcpy funkcija. Vidjeli smo da se ova funkcija može koristiti za bilo koji tip memorijskog bloka, ali ova funkcija ima određena ograničenja. Dakle, ovu funkciju morate pažljivo koristiti.