Skip to content
Marcos edited this page Oct 1, 2024 · 3 revisions

Función ft_memset

La función ft_memset llena un bloque de memoria con un valor específico durante un número determinado de bytes.

Explicación del comando man

MEMSET(3) (simplified)

NAME
    memset -- fill a byte string with a byte value
SYNOPSIS
    void *memset(void *b, int c, size_t len);
DESCRIPTION
    The memset() function writes len bytes of value c (converted to an unsigned char) to the string b.
RETURN VALUES
    The memset() function returns its first argument.

Explicación con mis palabras

La función memset() toma un bloque de memoria (apuntado por el argumento b), un valor (el argumento c), y una longitud len. Llena los primeros len bytes del bloque de memoria con el valor c (convertido a un unsigned char). La función devuelve el puntero al bloque de memoria original.

Implementación en C

Aquí te muestro mi implementación de la función ft_memset en mi proyecto de Libft.

Código de ft_memset

#include "libft.h"

void	*ft_memset(void *b, int c, size_t len)
{
	unsigned char	*tmp;

	// Convertimos el puntero 'b' a un puntero de tipo unsigned char
	// para trabajar con los bytes individuales.
	tmp = (unsigned char *)b;

	// Llenamos el bloque de memoria con el valor de 'c' durante 'len' bytes.
	while (len > 0)
	{
		// Asignamos el valor de 'c' (convertido a unsigned char) a la posición actual.
		*(tmp++) = (unsigned char)c;
		// Reducimos 'len' en cada iteración para recorrer todo el bloque de memoria.
		len--;
	}

	// Devolvemos el puntero original 'b'.
	return (b);
}

Main para probar ft_memset

El siguiente código es un ejemplo de cómo puedes probar la función ft_memset():

#include <stdio.h>

void	*ft_memset(void *b, int c, size_t len);

int main(void)
{
	char str[50] = "Libft es genial!";
	
	printf("Antes de memset: %s\n", str);
	ft_memset(str, '*', 5);
	printf("Después de memset: %s\n", str); // Debe llenar los primeros 5 caracteres con '*'

	return 0;
}

Recomendaciones o ejemplos de uso

  • ¿Por qué usar memset?
    memset es una función muy útil cuando necesitas inicializar bloques de memoria con un valor específico. Es especialmente eficiente cuando trabajas con arrays o buffers grandes y deseas asignar rápidamente un valor a todos los elementos.

  • ¿Cuándo usar memset?
    Usa memset cuando quieras rellenar un bloque de memoria con un valor determinado, ya sea para inicializar estructuras, buffers o arrays, o cuando necesitas asegurarte de que la memoria está vacía o llena de un valor constante antes de usarla. Es particularmente útil al trabajar con datos binarios o al asignar memoria dinámica.

Clone this wiki locally