Cómo se usa la función de memset

Cómo se usa la función de memset

En C, la función memset () se usa para establecer un valor de un byte en un byte de bloque de memoria por byte. Esta función es útil para la inicialización de un byte de bloque de memoria por byte por un valor particular. En este artículo, veremos en detalle cómo se puede usar esta función. Entonces empecemos.

Archivo de cabecera:

cadena.H

Sintaxis:

void *memset (void *str, int ch, size_t n)

Esta función establece la primera norte bytes del bloque de memoria apuntados por stri por pez.

Argumentos:

La función toma 3 argumentos:

  1. stri: Este es el puntero de la ubicación de memoria donde se establecerá la memoria. Este es un puntero vacío, por lo que podemos establecer cualquier tipo de bloque de memoria, pero la memoria será establecida Byte por Byte.
  2. pez: Este es el valor que se va a copiar en el bloque de memoria. Este es un valor entero, pero se convierte en un carácter sin firmar antes de copiarse.
  3. norte: Este es el número de bytes en el bloque de memoria que se establece.

Valores de retorno:

memset () Devuelve la primera dirección del bloque de memoria desde donde comienza a establecer el valor.

Ejemplos:

//Ejemplo 1.C
#incluir
#incluir
int main ()

char str [30] = "abcd efgh";
printf ("antes de memset => %s", str);
memset (str, 'x', 3);
printf ("\ nafter memset => %s \ n", str);
regresar 0;


En el ejemplo1.c, hemos declarado una matriz de personajes de tamaño 30. Luego lo hemos inicializado con la cadena "ABCD EFGH."En la función MemSet, hemos pasado 3 argumentos Str, 'X' y 3. Entonces, el bloque de memoria apuntado por STR será restablecido los primeros 3 caracteres por 'X.'Después de Memset, cuando imprimamos la memoria, obtendremos “XXXD EFGH."

// Ejemplo2.C
#incluir
#incluir
int main ()

char str [30] = "abcd efgh";
printf ("antes de memset => %s", str);
memset (str+4, 'x', 3);
printf ("\ nafter memset => %s \ n", str);
regresar 0;


En el ejemplo2.c, hemos pasado Str+4 a la función de memset. Entonces, restablece la memoria después de la cuarta ubicación de STR. Después de Memset, cuando imprimamos la memoria, obtendremos "ABCDXXXGH."

// Ejemplo3.C
#incluir
#incluir
int main ()

int arr [5], i;
memset (arr, 10,5*sizeOf (arr [0]));
printf ("\ narr elements => \ n");
para (i = 0; i<5;i++)
printf ("%d \ t", arr [i]);
printf ("\ n");
regresar 0;


En el ejemplo3.C, hemos declarado una matriz entera de tamaño 5 e intentando inicializarlo por 10. Pero desde la salida, hemos visto que la matriz no se inicializa por 10; En cambio, tenemos el valor "168430090". Esto se debe a que el valor entero es mayor que un byte y la función de memset convierte el valor en un carácter sin firmar antes de copiarse. Ahora, veremos cómo obtendremos el valor "168430090".


La representación binaria de 10 es 00000000 00000000 00000000 00001010.

Cuando el entero se convierte en char sin firmar, se considera el 1 byte inferior. Entonces, cuando 10 se convierte en Char Unsigned, es una representación binaria es 00001010.

la función memset () establece el byte de ubicación de memoria por byte. Entonces, un total de 4 bytes serán: 00001010 00001010 00001010 00001010.

El valor decimal de la representación binaria de 4 bytes es 168430090.

// Ejemplo4.C
#incluir
#incluir
int main ()

int arr [5], i;
memset (arr, 0,5*sizeof (arr [0]));
printf ("\ narr elements => \ n");
para (i = 0; i<5;i++)
printf ("%d \ t", arr [i]);
printf ("\ n");
regresar 0;


En el ejemplo4.c, hemos inicializado la matriz entera por 0. Todos los bits de la representación binaria de 0 son 0. Entonces la matriz se inicializa por 0.

// Ejemplo5.C
#incluir
#incluir
int main ()

int arr [5], i;
memset (arr, -1,5*sizeOf (arr [0]));
printf ("\ narr elements => \ n");
para (i = 0; i<5;i++)
printf ("%d \ t", arr [i]);
printf ("\ n");
regresar 0;


En el ejemplo5.c, hemos inicializado la matriz entera por 0. Todos los bits de la representación binaria de -1 son 1. Entonces la matriz se inicializa por -1.

Conclusión:

En este artículo, hemos visto utilizando la función MemSet cómo podemos inicializar o establecer el valor de un bloque de memoria de manera eficiente. Podemos establecer cualquier carácter y 0 o -1 como valor entero en un bloque de memoria. La función de memset es más rápida para establecer una gran parte de la memoria contigua en comparación con simplemente configurar la ubicación usando un bucle.