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 primeran
bytes del área de memoria apuntada pors
con el byte constantec
.
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 int
s 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.