memset una matriz a 1

Estoy intentando inicializar una matriz 2d con algún entero. Si inicializo la matriz a 0, estoy obteniendo resultados correctos, pero si uso algún otro entero, obtengo algunos valores aleatorios.

int main() { int array[4][4]; memset(array,1,sizeof(int)*16); printf("%d",array[1][2]); <---- Not set to 1 } 

memset establece todos los bytes de su matriz a 1 no todos los elementos int .

Utilice una lista de inicializadores con todos los valores establecidos en 1 o una instrucción de bucle para copiar un valor de 1 en todos los elementos.

memset funciona solo byte por byte. La puesta a cero de los bits funciona en general porque todos los ceros integrales son generalmente bits de todo cero, por lo que la agrupación de cuatro bytes de bits de todo cero en un solo int cero bits le da cero. Sin embargo, para las cosas que no son bytes, la forma más sencilla de inicializarlas es simplemente inicializarlas explícitamente.

memset permite llenar bytes individuales como memoria y está tratando de establecer valores enteros (quizás 4 o más bytes). Su enfoque solo funcionará en el número 0 y -1 ya que ambos están representados en binario como 00000000 o 11111111 .

El bucle for no es demasiado molesto:

 int main() { int i, val = 1, max = 4; int array[max][max]; max = max * max; for(i = 0 i < max; i++) { array[i] = val; } } 

Porque memset trabaja en byte y establece cada byte a 1.

 memset(hash, 1, cnt); 

Así que una vez leído, el valor mostrará 16843009 = 0x01010101 = 1000000010000000100000001
No 0x00000001
Pero si su requerimiento es solo para valor bool o binario, entonces podemos establecer el uso del estándar C99 para la biblioteca C

 #include  #include  #include  #include  //Use C99 standard for C language which supports bool variables int main() { int i, cnt = 5; bool *hash = NULL; hash = malloc(cnt); memset(hash, 1, cnt); printf("Hello, World!\n"); for(i=0; i 

Salida:

¡Hola Mundo!
1 1 1 1 1