I have a struct which has several arrays within it. The arrays have type unsigned char[4].
I can initialize each element by calling
struct->array1[0] = (unsigned char) something; ... struct->array1[3] = (unsigned char) something; Just wondering if there is a way to initialize all 4 values in one line.
SOLUTION: I needed to create a temporary array with all the values initialized, then call memset() to copy the values to the struct array.
16 Answers
If you really mean "initialize" in the sense that you can do it at the time you declare the variable, then sure:
struct x { unsigned char array1[4]; unsigned char array2[4]; }; struct x mystruct = { { 1, 2, 3, 4 }, { 5, 6, 7, 8 } }; 4When you create the struct, you can initialise it with aggregate initialisation:
struct test { int blah; char arr[4]; }; struct test = { 5, { 'a', 'b', 'c', 'd' } }; If the values are the same, you might do something like
struct->array[0] = struct->array[1] = struct->array[2] = struct->array[3] = (unsigned char) something; Otherwise, if the values are stored in an array, you can use the memcpy function like so
memcpy(struct->array, some_array, sizeof(struct->array)); 1Yes:
struct Foo { unsigned char a[4]; unsigned char b[4]; }; struct Foo x = { { 1, 2, 3, 'a' }, { 'a', 'b', 'c', 0 } }; I see you have a pointer (do you?).
If you allocate memory for the pointer with calloc() everything inside the struct will be initialized with 0.
Otherwise you need to memset() to 0 or assign a value element-by-element.
memset(struct_pointer, 0, sizeof *struct_pointer); 1You can loop too:
for(i = 0; i < 4; i++) the_struct->array1[i] = (unsigned char) something; This will work even when you have not char but e.g. int (and values != 0). In fact, memsetting to, say, 1 a struct made of int (when sizeof int greater than 1) is not the correct way to initialize them.