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.

1

6 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 } }; 
4

When 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)); 
1

Yes:

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); 
1

You 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.

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy