Escribir su propia función memcpy () en C

Aquí, vamos a aprender cómo escribir su propia función () memcpy para copiar bloques de memoria de un lugar a otro?

Como ya hemos comentado en el post anterior que memcpy () es una función de biblioteca de “string.h” en lenguaje C y se utiliza para copiar bloques de memoria de un lugar a otro.

Leer más: memcpy () en C

Aquí, vamos a crear nuestro propio “memcpy ()” función

prototipo de función:

    myMemCpy(void* target, void* source, size_t n);

copiará n bytes de la fuente a objetivo .

Definición de la función:

//memcpy() Implementation, name: myMemCpy()
void myMemCpy(void* target, void* source, size_t n){
int i;
//declare string and type casting
char *t = (char*)target;
char *s = (char*)source;
//copying "n" bytes of source to target
for(i=0;i<n;i++)
t[i]=s[i];
}

Ejemplo 1) Copia de una cadena a otra (todos los bytes de una cadena a otra)

#include <stdio.h>
#include <string.h>
#define MAX_CHAR 50
//memcpy() Implementation, name: myMemCpy()
void myMemCpy(void* target, void* source, size_t n){
int i;
//declare string and type casting
char *t = (char*)target;
char *s = (char*)source;
//copying "n" bytes of source to target
for(i=0;i<n;i++)
t[i]=s[i];
}
int main(){
char str1[MAX_CHAR] = "Hello Wold!";
char str2[MAX_CHAR] = "Nothing is impossible";
printf("Before copying...n");
printf("str1: %sn", str1);
printf("str2: %sn", str2);
//copying all bytes of str2 to str1
myMemCpy(str1, str2, strlen(str2));
printf("After copying...n");
printf("str1: %sn",str1);
printf("str2: %sn",str2);
return 0;
}

salida

Before copying...
str1: Hello Wold!
str2: Nothing is impossible
After copying...
str1: Nothing is impossible
str2: Nothing is impossible

Ejemplo 2) Copiar algunos de los bytes a partir de una matriz de bytes a otra matriz de

#include <stdio.h>
#include <string.h>
#define MAXLEN 11
//function to print array
void printArray(unsigned char str[], int length){
int i;
for(i=0; i<length;i++)
printf("%02X ", str[i]);
printf("n");
}
//memcpy() implementation, name: myMemCpy()
void myMemCpy(void* target, void* source, size_t n){
int i;
//declare string and type casting
char *t = (char*)target;
char *s = (char*)source;
//copying "n" bytes of source to target
for(i=0;i<n;i++)
t[i]=s[i];
}
int main(){
unsigned char arr1[MAXLEN] = {0x10, 0x20, 0x30, 0x40, 0x50, 0x60, 0x70, 0x80, 0x90, 0x95};
unsigned char arr2[MAXLEN] = {0};
printf("Before copying...n");
printf("arr1: "); printArray(arr1,strlen(arr1));
printf("arr2: "); printArray(arr2,strlen(arr2));
//copying 5 bytes of arr1 to arr2
myMemCpy(arr2, arr1, 5);
printf("After copying...n");
printf("arr1: "); printArray(arr1,strlen(arr1));
printf("arr2: "); printArray(arr2,strlen(arr2));
return 0;
}

salida

Before copying...
arr1: 10 20 30 40 50 60 70 80 90 95
arr2:
After copying...
arr1: 10 20 30 40 50 60 70 80 90 95
arr2: 10 20 30 40 50


Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *