Escribir su propia función memset () en C

Aquí, vamos a aprender a escribir sus propios memset (función) para llenar bloques de memoria con un valor particular en C?

Como ya hemos comentado en el post anterior que memset () es una función de la biblioteca de “string.h” y se utiliza para rellenar los bloques de memoria con un valor particular.

Leer más: memset () en C

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

prototipo de función:

    void myMemSet(void* str, char ch, size_t n);

se llenará n bloques del str con ch .

Definición de la función:

//memset() function implemention
//function name: myMemSet()
void myMemSet(void* str, char ch, size_t n){
int i;
//type cast the str from void* to char*
char *s = (char*) str;
//fill "n" elements/blocks with ch
for(i=0; i<n; i++)
s[i]=ch;
}

Ejemplo:

#include <stdio.h>
#include <string.h>
#define LEN 10
//memset() function implemention
//function name: myMemSet()
void myMemSet(void* str, char ch, size_t n){
int i;
//type cast the str from void* to char*
char *s = (char*) str;
//fill "n" elements/blocks with ch
for(i=0; i<n; i++)
s[i]=ch;
}
int main(void) {
char arr[LEN];
int loop;
printf("Array elements are (before myMemSet()): n");
for(loop=0; loop<LEN; loop++)
printf("%d ",arr[loop]);
printf("n");
//filling all blocks with 0
myMemSet(arr,0,LEN);
printf("Array elements are (after myMemSet()): n");
for(loop=0; loop<LEN; loop++)
printf("%d ",arr[loop]);
printf("n");
//filling first 3 blocks with -1
//and second 3 blocks with -2
//and then 3 blocks with -3
myMemSet(arr,-1,3);
myMemSet(arr+3,-2,3);
myMemSet(arr+6,-3,3);
printf("Array elements are (after myMemSet()): n");
for(loop=0; loop<LEN; loop++)
printf("%d ",arr[loop]);
printf("n");
return 0;
}

salida

Array elements are (before myMemSet()):
64 86 -85 42 -4 127 0 0 0 0
Array elements are (after myMemSet()):
0 0 0 0 0 0 0 0 0 0
Array elements are (after myMemSet()):
-1 -1 -1 -2 -2 -2 -3 -3 -3 0

Explicación:

En este ejemplo, declaramos matriz de caracteres arr de LEN bytes ( LEN es una macro con el valor 10), cuando se imprimió el valor de arr , la salida es basura porque matriz está sin inicializar. A continuación, se utilizó myMemSet () y llenamos todos los elementos por 0 . Entonces, impreso los elementos de nuevo el valor de todos los elementos eran 0 . Entonces, nos llena primero 3 elementos con -1 y próximos 3 elementos con -2 y próximos 3 elementos con -3 . Así, los valores de todos los elementos al final: -1 -1 -1 -2 -3 -2-2 -3 -3 0 .


Deja un comentario

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