Header-bestand:
draad.hSyntaxis:
void * mempcpy (void *dest, const void *src, size_t size)Argumenten:
De functie heeft 3 argumenten:
- bestemming:
- src:
- maat :
Dit is een startpointer van een geheugenblok waar het geheugenblok naar wijst src (2e argument) wordt gekopieerd. De aanwijzer wordt ongeldig verklaard, dus elk type geheugenblok kan worden gekopieerd.
Dit is een startpunt van het brongeheugenblok van waaruit het geheugenblok wordt gekopieerd. De aanwijzer wordt ongeldig verklaard, dus elk type geheugenblok kan worden gekopieerd.
Dit is de grootte van het geheugenblok in bytes.
De waarde van de twee aanwijzer bestemming en src moet zo zijn dat twee geheugenblokken elkaar niet overlappen. De grootte van de geheugenblokken van bron en bestemming moet minimaal zijn grootte (3e argument) bytes om overlappende situaties te voorkomen. Als de twee geheugenblokken elkaar overlappen, dan is het gedrag van de memcpy() functie is niet gedefinieerd. Als er een mogelijkheid van overlapping is, kunt u de onthouden() bibliotheekfunctie waar overlap goed gedefinieerd is. onthouden() functie is langzamer in vergelijking met memcpy() functie.
Vanwege de waarde van grootte, als de bron of bestemming wordt benaderd buiten hun bufferlengte, dan is het gedrag van de memcpy() functie is niet gedefinieerd.
De memcpy() functie controleert niet om '\0'-teken te beëindigen.
Retourwaarden:
Deze functie retourneert de waarde van het bestemmingsadres bestemming. als de waarde van bestemming is al beschikbaar, dus het hoeft niet in een variabele op te slaan.
Voorbeelden:
//Voorbeeld 1.c#include
#include
int hoofd()
char src[] = "Hallo";
char dest[13];
memcpy(dest,src,6);
printf("dest after first memcpy() => %s\n",dest);
memcpy(dest+sizeof(src)-1," wereld!",8);
printf("dest na tweede memcpy() => %s\n",dest);
retourneer 0;
In voorbeeld1.c we hebben een array van twee tekens gedeclareerd src en bestemming. De grootte van de src is 6 en de bestemming is 13. Eerst hebben we 6 tekens 'H', 'e', 'l', 'l', 'o', '\0' gekopieerd van src naar bestemming ( Lijn 11 ). In de tweede memcpy() functie kopieerde 8 karakters", 'w', 'o', 'r', 'l', 'd', '!', '\0' naar het doel na 5 tekens ( regel 15 ). Picturaal kunnen we dit als volgt weergeven:
//Voorbeeld2.c
#include
#include
int hoofd()
typedef struct student
teken * naam;
int-ID;
int leeftijd;
soa;
std student1; // Declareer student1 van het type std
std student2; // Declareer student2 van het type std
// De waarde van sudent1 toewijzen
student1.naam = "Bamdev Ghosh";
student1.id = 1105;
student1.leeftijd = 30;
printf("Student1:\n\tNaam: %s\n\tid: %d\n\tage: %d\n",student1.naam,
student1.id,student1.leeftijd);
// Kopieer student1 naar student2
memcpy(&student2, &student1, sizeof(student1));
printf("\n\nNa memcpy:");
printf("\n\nStudent2:\n\tNaam: %s\n\tid: %d\n\tage: %d\n",
student2.naam,student2.id,student2.leeftijd);
retourneer 0;
In voorbeeld2.c we hebben twee structuren gedeclareerd: student1 en student2 (Lijn 15 en 16). Eerst initialiseren we student1 (regel 19, 20, 21). Daarna gebruiken we memcpy om gegevens van te kopiëren student1 naar student2.
Conclusie:
In dit artikel hebben we geleerd hoe u de memcpy functie. We hebben gezien dat deze functie voor elk type geheugenblok kan worden gebruikt, maar deze functie heeft enkele beperkingen. Je moet deze functie dus voorzichtig gebruiken.