Eyzuky
Eyzuky

Reputation: 1935

Trying to set a struct's inside array to be initialized in C

I have this struct definition:

typedef struct intArray
{
    int myArray[1000];
} intArray;

My goal is to create an intArray of zeros, i tried this:

intArray example;
int createArray[1000] = {0};
example.myArray = createArray;

This results in this error message:

error: assignment to expression with array type

I want the struct to automatically initialize the array to 0's but i understand it is not possible because it is only a type definition and not a variable. So i created one and created the array, just tried to assign it and this is the result. Any advice is appreciated.

Upvotes: 3

Views: 82

Answers (2)

Nunchy
Nunchy

Reputation: 948

Why not use memset to zero the array? Also, as suggested by another user, it'd be better to allocate this memory to a pointer....especially if you intend to pass that struct around between functions.

Just a thought, but this would work:

typedef struct intArray {
    int *myArray;
} intArray;

int main(void)
{
    intArray a;
    int b;

    // malloc() and zero the array
    //         
    // Heh...yeah, always check return value -- thanks,
    // Bob__ - much obliged, sir.
    //              
    if ((a.myArray = calloc(1000, sizeof *a.myArray)) == NULL) {
        perror("malloc()");
        exit(EXIT_FAILURE);
    }

    memset(a.myArray, 0, (1000 * sizeof(int)));

    // Fill the array with some values
    //
    for (b = 0; b < 1000; b++)
        a.myArray[b] = b;

    // Just to make sure all is well...yep, this works.
    //
    for (b = 999; b >= 0; b--)
        fprintf(stdout, "myArray[%i] = %i\n", b, a.myArray[b]);

    free(a.myArray);

}

Upvotes: 1

Awais Chishti
Awais Chishti

Reputation: 395

Declaring arrays like int myArray[1000]; won't let you change the value of the array pointer. Declare your struct like

typedef struct intArray
{
    int *myArray;
} intArray;

if you can.

Upvotes: 1

Related Questions