Rubrikfil:
sträng.hSyntax:
ogiltig * mempcpy (ogiltig * dest, const ogiltig * src, storlek_t storlek)Argument:
Funktionen tar 3 argument:
- dest:
- src:
- storlek:
Detta är en startpekare för ett minnesblock där minnesblocket pekar av src (Andra argumentet) kommer att kopieras. Pekaren deklareras som ogiltig så att alla typer av minnesblock kan kopieras.
Detta är en startpekare för källminnesblocket varifrån minnesblocket kommer att kopieras. Pekaren deklareras som ogiltig så att alla typer av minnesblock kan kopieras.
Detta är storleken på minnesblocket i byte.
Värdet på tvåpekaren dest och src bör vara på ett sådant sätt att två minnesblock inte överlappar varandra. Storleken på minnesblock för källa och destination måste vara minst storlek (3: e argument) byte för att undvika överlappande situationer. Om de två minnesblocken överlappar varandra fungerar beteendet hos memcpy () funktionen är odefinierad. När det finns en möjlighet till överlappning kan du använda memmove () biblioteksfunktion där överlappning är väldefinierad. memmove () funktionen är långsammare jämfört med memcpy () fungera.
På grund av värdet av storlek, om källan eller destinationen nås utöver deras buffertlängd så uppför sig memcpy () funktionen är odefinierad.
De memcpy () funktionen markerar inte för att avsluta '\ 0' karaktär.
Returvärden:
Denna funktion returnerar värdet på destinationsadressen dest. Som värdet av dest är redan tillgänglig så behöver den inte lagras i någon variabel.
Exempel:
// Exempel1.c#omfatta
#omfatta
int main ()
char src [] = "Hej";
char dest [13];
memcpy (dest, src, 6);
printf ("dest efter första memcpy () =>% s \ n", dest);
memcpy (dest + sizeof (src) -1, "world!", 8);
printf ("dest efter andra memcpy () =>% s \ n", dest);
returnera 0;
I exempel 1.c vi har deklarerat två tecken src och dest. Storleken på src är 6 och dest är 13. Först kopierade vi 6 tecken 'H', 'e', 'l', 'l', 'o', '\ 0' från src till dest (Rad 11). I den andra memcpy () -funktionen kopierades åtta tecken ", 'w', 'o', 'r', 'l', 'd', '!',' \ 0 'till dest efter 5 tecken (rad 15). Bildmässigt kan vi representera detta enligt följande:
// Exempel2.c
#omfatta
#omfatta
int main ()
typedef struct student
karaktärsnamn;
int id;
int ålder;
std
std student1; // Förklara student1 av typen std
std student2; // Förklara student2 av typ std
// Tilldela värdet av sudent1
student1.namn = "Bamdev Ghosh";
student1.id = 1105;
student1.ålder = 30;
printf ("Student1: \ n \ tNamn:% s \ n \ tid:% d \ n \ tage:% d \ n", student1.namn,
student1.id, student1.ålder);
// Kopiera student1 till student2
memcpy (& student2, & student1, sizeof (student1));
printf ("\ n \ nEfter memcpy:");
printf ("\ n \ nStudent2: \ n \ tNamn:% s \ n \ tid:% d \ n \ tage:% d \ n",
student2.namn, student2.id, student2.ålder);
returnera 0;
I exempel 2.c vi har förklarat två strukturer student1 och student2 (Rad 15 och 16). Först initialiserar vi student1 (rad 19, 20, 21). Efter det använder vi memcpy att kopiera data från student1 till student2.
Slutsats:
I den här artikeln har vi lärt oss hur man använder memcpy fungera. Vi har sett att denna funktion kan användas för alla typer av minnesblock men den här funktionen har vissa begränsningar. Så du måste använda den här funktionen noggrant.