En C, la función memset () se usa para establecer un valor de un byte en un bloque de memoria byte por byte. Esta función es útil para la inicialización de un bloque de memoria byte a byte por un valor particular. En este artículo veremos en detalle cómo se puede utilizar esta función. Entonces empecemos.
Archivo de cabecera:
1 | cuerda.h |
Sintaxis:
1 | void * memset (void * str, int ch, size_t n) |
Esta función establece la primera norte bytes del bloque de memoria apuntado por str por ch.
Argumentos:
La función toma 3 argumentos:
- str: Este es el puntero de la ubicación de la memoria donde se configurará la memoria. Este es un puntero vacío, por lo que podemos configurar cualquier tipo de bloque de memoria, pero la memoria se configurará byte por byte.
- ch: Este es el valor que se va a copiar al bloque de memoria. Este es un valor entero, pero se convierte en un carácter sin signo antes de copiarlo.
- norte: Este es el número de bytes en el bloque de memoria que se establece.
Valores devueltos:
memset () devuelve la primera dirección del bloque de memoria desde donde comienza a establecer el valor.
Ejemplos:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 dieciséis | //Ejemplo 1.C #incluir #incluir int main () char str [30] = "ABCD EFGH"; printf ("Antes de memset =>% s", str); memset (cadena, 'x', 3); printf ("\ nDespués de memset =>% s \ n", str); return 0; |
En Example1.c, hemos declarado una matriz de caracteres 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 señalado por str se restablecerá los primeros 3 caracteres por 'x.'Después de memset, cuando imprimimos la memoria, obtendremos “xxxD EFGH."
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 dieciséis | // Ejemplo2.C #incluir #incluir int main () char str [30] = "ABCD EFGH"; printf ("Antes de memset =>% s", str); memset (str + 4, 'x', 3); printf ("\ nDespués de memset =>% s \ n", str); return 0; |
En Example2.c, hemos pasado str + 4 a la función memset. Entonces, restableció la memoria después de la cuarta ubicación de str. Después de memset, cuando imprimimos la memoria, obtendremos “ABCDxxxGH."
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 dieciséis 17 18 | // Ejemplo3.C #incluir #incluir int main () int arr [5], i; memset (arr, 10,5 * tamaño de (arr [0])); printf ("\ narr Elementos => \ n"); para (i = 0; i<5;i++) printf ("% d \ t", arr [i]); printf ("\ n"); return 0; |
En Example3.c, hemos declarado una matriz de enteros de tamaño 5 e intentamos inicializarla por 10. Pero a partir de la salida, hemos visto que la matriz no se inicializa con 10; en su lugar, tenemos el valor "168430090". Esto se debe a que el valor entero es mayor que un byte y la función memset convierte el valor en un carácter sin signo antes de copiarlo. Ahora veremos cómo obtendremos el valor "168430090".
La representación binaria de 10 es 00000000 00000000 00000000 00001010.
Cuando un entero se convierte en un carácter sin firmar, se considera el byte inferior 1. Entonces, cuando 10 se convierte en un carácter sin firmar, es una representación binaria es 00001010.
La función memset () establece la ubicación de la memoria byte por byte. Entonces, un total de 4 bytes será: 00001010 00001010 00001010 00001010.
El valor decimal de la representación binaria de 4 bytes es 168430090.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 dieciséis 17 18 | // Ejemplo4.C #incluir #incluir int main () int arr [5], i; memset (arr, 0,5 * tamaño de (arr [0])); printf ("\ narr Elementos => \ n"); para (i = 0; i<5;i++) printf ("% d \ t", arr [i]); printf ("\ n"); return 0; |
En Example4.c, hemos inicializado la matriz de enteros en 0. Todos los bits de la representación binaria de 0 son 0. Entonces la matriz se inicializa en 0.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 dieciséis 17 18 19 | // Ejemplo5.C #incluir #incluir int main () int arr [5], i; memset (arr, -1,5 * tamaño de (arr [0])); printf ("\ narr Elementos => \ n"); para (i = 0; i<5;i++) printf ("% d \ t", arr [i]); printf ("\ n"); return 0; |
En Example5.c, hemos inicializado la matriz de enteros en 0. Todos los bits de la representación binaria de -1 son 1. Entonces la matriz se inicializa con -1.
Conclusión:
En este artículo, hemos visto al usar 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 Memset es más rápida para configurar una gran cantidad de memoria contigua en comparación con simplemente configurar la ubicación mediante un bucle.