Saltar al contenido

Usando memset para matriz de enteros en C

Solución:

No, no puedes usar memset() como esto. La página de manual dice (el énfasis es mío):

los memset() función llena la primera n bytes del área de memoria apuntada por s con el byte constante c.

Desde un int suele ser de 4 bytes, esto no es suficiente.


Si tu (¡¡incorrectamente!!) intenta hacer esto:

int arr[15];
memset(arr, 1, 6*sizeof(int));    //wrong!

luego los primeros 6 ints en la matriz se establecerá realmente en 0x01010101 = 16843009.

La única vez que es realmente aceptable escribir sobre un “blob” de datos con tipos de datos que no son de bytes, es memset(thing, 0, sizeof(thing)); para “poner a cero” toda la estructura / matriz. Esto funciona porque NULL, 0x00000000, 0.0, son completamente ceros.


La solución es utilizar un for bucle y configúrelo usted mismo:

int arr[15];
int i;

for (i=0; i<6; ++i)    // Set the first 6 elements in the array
    arr[i] = 1;        // to the value 1.

Respuesta corta, NO.

Respuesta larga, memset establece bytes y funciona para caracteres porque son bytes únicos, pero los enteros no lo son.

El tercer argumento de memset es el tamaño de bytes. Por lo tanto, debe establecer el tamaño total de bytes de arr[15]

memset(arr, 1, sizeof(arr));

Sin embargo, probablemente, debería querer establecer el valor 1 para elementos completos en arr. Entonces es mejor que te pongas en el bucle.

for (i = 0; i < sizeof(arr)/sizeof(arr[0]); i++) {
    arr[i] = 1;
}

Porque memset() establezca 1 en cada byte. Entonces no es lo esperado.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)


Tags : / /

Utiliza Nuestro Buscador

Deja una respuesta

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