Overskriftsfil:
snor.hSyntaks:
ugyldig * mempcpy (ugyldig * dest, const ugyldig * src, størrelse_t størrelse)Argumenter:
Funktionen tager 3 argumenter:
- dest:
- src:
- størrelse:
Dette er en startmarkør for en hukommelsesblok, hvor hukommelsesblokken peger ved src (2. argument) kopieres. Markøren erklæres ugyldig, så enhver form for hukommelsesblok kan kopieres.
Dette er en startmarkør for kildehukommelsesblokken, hvorfra hukommelsesblokken kopieres. Markøren erklæres ugyldig, så enhver form for hukommelsesblok kan kopieres.
Dette er størrelsen på hukommelsesblokken i byte.
Værdien af de to markører dest og src skal være på en sådan måde, at to hukommelsesblokke ikke overlapper hinanden. Størrelsen på hukommelsesblokke for kilde og destination skal være mindst størrelse (3. argument) bytes for at undgå overlapning af situationer. Hvis de to hukommelsesblokke overlapper hinanden, fungerer adfærden for memcpy () funktion er udefineret. Når der er mulighed for overlapning, kan du bruge memmove () biblioteksfunktion, hvor overlappende er veldefineret. memmove () funktion er langsommere sammenlignet med memcpy () fungere.
På grund af værdien af størrelse, hvis der er adgang til kilden eller destinationen ud over deres bufferlængde, så fungerer adfærden for memcpy () funktion er udefineret.
Det memcpy () funktion markerer ikke for at afslutte '\ 0' tegn.
Returværdier:
Denne funktion returnerer værdien for destinationsadressen dest. Som værdien af dest er allerede tilgængelig, så det behøver ikke at gemme i nogen variabel.
Eksempler:
// Eksempel1.c#omfatte
#omfatte
int main ()
char src [] = "Hej";
char dest [13];
memcpy (dest, src, 6);
printf ("dest efter første memcpy () =>% s \ n", dest);
memcpy (dest + sizeof (src) -1, "verden!", 8);
printf ("dest efter anden memcpy () =>% s \ n", dest);
returnere 0;
I eksempel 1.c vi har deklareret to-tegns array src og dest. Størrelsen på src er 6 og dest er 13. Først kopierede vi 6 tegn 'H', 'e', 'l', 'l', 'o', '\ 0' fra src til dest (Linie 11). I den anden memcpy () -funktion blev der kopieret 8 tegn ", 'w', 'o', 'r', 'l', 'd', '!',' \ 0 'til dest efter 5 tegn (linje 15). Billedmæssigt kan vi repræsentere dette som følger:
// Eksempel2.c
#omfatte
#omfatte
int main ()
typedef struct studerende
char * navn;
int id;
int alder
std
std student1; // Erklær student1 af typen std
std student2; // Erklær student2 af typen std
// Tildeling af værdien af sudent1
studerende1.name = "Bamdev Ghosh";
studerende1.id = 1105;
studerende1.alder = 30;
printf ("Student1: \ n \ t Navn:% s \ n \ tid:% d \ n \ tage:% d \ n", student1.navn,
studerende1.id, student1.alder);
// Kopier student1 til elev2
memcpy (& student2, & student1, sizeof (student1));
printf ("\ n \ nEfter memcpy:");
printf ("\ n \ nStudent2: \ n \ t Navn:% s \ n \ tid:% d \ n \ tage:% d \ n",
studerende2.navn, studerende2.id, student2.alder);
returnere 0;
I eksempel 2.c vi har deklareret to struktur studerende1 og studerende2 (Linie 15 og 16). Først initialiserer vi student1 (linje 19, 20, 21). Derefter bruger vi memcpy at kopiere data fra studerende1 til studerende2.
Konklusion:
I denne artikel har vi lært, hvordan man bruger memcpy fungere. Vi har set, at denne funktion kan bruges til enhver form for hukommelsesblok, men denne funktion har nogle begrænsninger. Så du skal bruge denne funktion omhyggeligt.