En tête de fichier:
chaîne.hSyntaxe:
void * mempcpy (void *dest, const void *src, size_t size)Arguments:
La fonction prend 3 arguments :
- destination :
- src :
- Taille :
C'est un pointeur de départ d'un bloc mémoire où le bloc mémoire pointé par src (2e argument) sera copié. Le pointeur est déclaré comme void, donc tout type de bloc mémoire peut être copié.
Ceci est un pointeur de départ du bloc mémoire source à partir duquel le bloc mémoire sera copié. Le pointeur est déclaré comme void, donc tout type de bloc mémoire peut être copié.
C'est la taille du bloc mémoire en octets.
La valeur des deux pointeurs dest et src doit être de telle sorte que deux blocs de mémoire ne se chevauchent pas. La taille des blocs mémoire de la source et de la destination doit être au moins de Taille (3e argument) octets pour éviter les situations de chevauchement. Si les deux blocs mémoire se chevauchent, le comportement du memcpy() la fonction n'est pas définie. Lorsqu'il y a une possibilité de chevauchement, vous pouvez utiliser le memmove() fonction de bibliothèque où le chevauchement est bien défini. memmove() la fonction est plus lente par rapport à memcpy() une fonction.
En raison de la valeur de Taille, si la source ou la destination est accédée au-delà de leur longueur de tampon, alors le comportement du memcpy() la fonction n'est pas définie.
le memcpy() la fonction ne vérifie pas pour terminer le caractère '\0'.
Valeurs de retour :
Cette fonction renvoie la valeur de l'adresse de destination dest. Comme la valeur de destin est déjà disponible, il n'a donc pas besoin d'être stocké dans une variable.
Exemples:
//Exemple 1.c#inclure
#inclure
int main()
char src[] = "Bonjour" ;
char dest[13];
memcpy(dest,src,6) ;
printf("dest après le premier memcpy() => %s\n",dest);
memcpy(dest+sizeof(src)-1," monde!",8) ;
printf("dest après la seconde memcpy() => %s\n",dest);
renvoie 0 ;
Dans Exemple1.c nous avons déclaré un tableau à deux caractères src et dest. La taille du src est 6 et le dest a 13 ans. Tout d'abord, nous avons copié 6 caractères 'H', 'e', 'l', 'l', 'o', '\0' de src à dest (Ligne 11). Dans la deuxième fonction memcpy() copié 8 caractères", 'w', 'o', 'r', 'l', 'd', '!', '\0' jusqu'au det après 5 caractères ( Ligne 15 ). En images, nous pouvons représenter cela comme suit :
//Exemple2.c
#inclure
#inclure
int main()
typedef struct étudiant
char *nom;
int id;
âge entier;
std;
étudiant std1; // Déclare student1 de type std
étudiant std2; // Déclare student2 de type std
// Attribution de la valeur de sudent1
étudiant1.nom = "Bamdev Ghosh" ;
étudiant1.identifiant = 1105 ;
étudiant1.âge = 30 ;
printf("Etudiant1 :\n\tNom : %s\n\tid : %d\n\tage : %d\n",étudiant1.Nom,
étudiant1.identifiant, étudiant1.âge);
// Copie élève1 vers élève2
memcpy(&student2, &student1, sizeof(student1));
printf("\n\nAprès memcpy :");
printf("\n\nÉtudiant2 :\n\tNom : %s\n\tid : %d\n\tage : %d\n",
étudiant2.nom, étudiant2.identifiant, étudiant2.âge);
renvoie 0 ;
Dans Exemple2.c nous avons déclaré deux structures étudiant1 et étudiant2 (Ligne 15 et 16). Tout d'abord, nous initialisons student1 (Ligne 19, 20, 21). Après cela, nous utilisons memcpy copier des données de étudiant1 à étudiant2.
Conclusion:
Dans cet article, nous avons appris à utiliser le memcpy une fonction. Nous avons vu que cette fonction peut être utilisée pour tout type de bloc mémoire mais cette fonction a quelques limitations. Donc, vous devez utiliser cette fonction avec précaution.