2012-03-24 9 views
9

Ho una struttura che contiene diversi array. Gli array hanno carattere char senza segno [4].Inizializza i valori dell'array in una struct

posso inizializzare ogni elemento chiamando

struct->array1[0] = (unsigned char) something; 
... 
struct->array1[3] = (unsigned char) something; 

Chiedo solo se c'è un modo per inizializzare tutti i 4 valori in una sola riga.

SOLUZIONE: Avevo bisogno di creare un array temporaneo con tutti i valori inizializzati, quindi chiamare memset() per copiare i valori nell'array struct.

+0

Tutti lo stesso valore? – hmjd

+0

Devo dire che questo è così noto che alcuni googling avrebbero rivelato rapidamente la risposta ... http://stackoverflow.com/questions/201101/how-to-initialize-an-array-in-c ;-) – tchap

risposta

5

Se i valori sono gli stessi, si potrebbe fare Somet Hing come

struct->array[0] = struct->array[1] = struct->array[2] = struct->array[3] = (unsigned char) something; 

In caso contrario, se i valori sono memorizzati in una matrice, è possibile utilizzare la funzione memcpy in questo modo

memcpy(struct->array, some_array, sizeof(struct->array)); 
+0

Questo era quello che dovevo fare. Avevo provato a creare un array temporaneo e rendendolo uguale ma avevo bisogno di memcpy. Grazie! –

23

Se davvero dire "inizializzazione", nel senso che si può fare al momento si dichiara la variabile, poi certo:

struct x { 
    unsigned char array1[4]; 
    unsigned char array2[4]; 
}; 

struct x mystruct = { 
    { 1, 2, 3, 4 }, 
    { 5, 6, 7, 8 } 
}; 
+0

Intendo di più nel senso che una volta creata la struttura per modificare ogni valore con gli array. –

+3

Gotcha - allora puoi usare 'memset()' per impostarli tutti allo stesso valore, o creare un array di template e 'memcpy()' se vuoi che siano diversi. Oltre a questo, praticamente tutto quello che puoi fare è assegnarli uno per uno. –

+0

Grazie, il memset è quello di cui avevo bisogno. –

2

Sì:

struct Foo 
{ 
    unsigned char a[4]; 
    unsigned char b[4]; 
}; 

struct Foo x = { { 1, 2, 3, 'a' }, { 'a', 'b', 'c', 0 } }; 
10

quando si crea il struct, è possibile inizializzare con inizializzazione aggregata:

struct test { 
    int blah; 
    char arr[4]; 
}; 

struct test = { 5, { 'a', 'b', 'c', 'd' } }; 
2

Vedo che avete un puntatore (vero?).

Se si alloca memoria per il puntatore con calloc(), tutto all'interno della struttura verrà inizializzato con 0.

In caso contrario è necessario memset() su 0 oppure assegnare un valore elemento per elemento.

memset(struct_pointer, 0, sizeof *struct_pointer); 
+0

Grazie. La parte di memset è ciò che mi ha aiutato. –

0

È possibile effettuare il ciclo troppo:

for(i = 0; i < 4; i++) the_struct->array1[i] = (unsigned char) something; 

Ciò funzionerà anche quando non avete char, ma per esempio int (e valori! = 0). Infatti, memsetting a, diciamo, 1 una struct fatta di int (quando sizeof int maggiore di 1) non è il modo corretto per inizializzarli.

Problemi correlati