-
Notifications
You must be signed in to change notification settings - Fork 0
memcpy
La función ft_memcpy copia n bytes del área de memoria apuntada por src al área de memoria apuntada por dst. Las áreas de memoria no deben solaparse, ya que el comportamiento no está definido si lo hacen.
MEMCPY(3) (simplified)
NAME
memcpy -- copy memory area
SYNOPSIS
void *memcpy(void *dst, const void *src, size_t n);
DESCRIPTION
The memcpy() function copies n bytes from memory area src to memory area dst. If dstt and src overlap, behavior is undefined. Applications in which dst and src might overlap should use memove(3) instead.
RETURN VALUES
The memcpy() function returns the original value of dst
La función memcpy() copia exactamente n bytes desde el área de memoria src (origen) al área de memoria dst (destino). Si las áreas de memoria de origen y destino se solapan, el comportamiento es indefinido. Si hay riesgo de solapamiento, es preferible utilizar memmove().
Aquí te muestro mi implementación de la función ft_memcpy en mi proyecto de Libft.
#include "libft.h"
void *ft_memcpy(void *dst, const void *src, size_t n)
{
unsigned char *tmp_dst;
const unsigned char *tmp_src;
// Si ambos punteros son NULL, no realizamos ninguna acción
if (dst == NULL && src == NULL)
return (dst);
// Convertimos los punteros para manipular byte por byte
tmp_dst = (unsigned char *)dst;
tmp_src = (const unsigned char *)src;
// Copiamos 'n' bytes desde src a dst
while (n > 0)
{
*(tmp_dst++) = *(tmp_src++);
n--;
}
// Devolvemos el puntero original 'dst'
return (dst);
}El siguiente código es un ejemplo de cómo puedes probar la función ft_memcpy():
#include <stdio.h>
void *ft_memcpy(void *dst, const void *src, size_t n);
int main(void)
{
char src[] = "Libft";
char dst[10];
ft_memcpy(dst, src, 6); // Copiamos 6 bytes (incluyendo el carácter nulo)
printf("Destino después de memcpy: %s\n", dst); // Debe aparecer por pantalla "Libft"
return 0;
}-
¿Por qué usar
memcpy?
memcpyes eficiente y rápido cuando necesitas copiar bloques de memoria y sabes que no habrá solapamiento entre las áreas de origen y destino. Es adecuado para copiar arrays, estructuras de datos o cualquier tipo de datos binarios entre áreas de memoria. -
¿Cuándo usar
memcpy?
Usamemcpycuando estés seguro de que las áreas de memoria de origen y destino no se solapan. Es útil cuando estás copiando datos entre buffers o estructuras que no se solapan y quieres evitar la sobrecarga de verificación adicional que se hace en funciones comomemmove. -
Alternativas:
Si las áreas de memoria pueden solaparse, deberías utilizarmemmove, ya que maneja correctamente el solapamiento de las áreas de memoria sin pérdida de datos.