quantumbutterfly
quantumbutterfly

Reputation: 1955

Add struct to struct array using void pointer to said array in C

Let's say I have the following struct and array of that struct:

struct Fileinfo {
  int ascii[128];  //space to store counts for each ASCII character.
  int lnlen;       //the longest line’s length
  int lnno;        //the longest line’s line number.
  char* filename;  //the file corresponding to the struct.
};

struct Analysis fileinfo_space[8]; //space for info about 8 files

I want to have a function that will add a new struct to this array. It must take a void pointer to the position where to store the struct as an argument

int addentry(void* storagespace){
    *(struct Fileinfo *)res = ??? //cast the pointer to struct pointer and put an empty struct there
    (struct Fileinfo *)res->lnlen = 1; //change the lnlen value of the struct to 1
}

My questions are:

  1. What goes in place of ??? I tried (Fileinfo){NULL,0,0,NULL} as per this Stackoverflow response. But I get `error: ‘Fileinfo’ undeclared (first use in this function)

  2. How do I create a void pointer to the array? Is (void *)fileinfo_space correct?

I am required to use void * as the argument for the function for this assignment. It's not up to me.

Upvotes: 0

Views: 490

Answers (1)

Jean-François Fabre
Jean-François Fabre

Reputation: 140168

Let's say you have some memory block passed as storagespace void pointer:

You have to define a constant to be able to initialize (unless you're using c++11), let's call it init. BTW your assignment value is wrong: first member is an array of int. You cannot pass NULL to it. Just zero-fill it like show below.

Then cast your void pointer into a pointer on your struct, then initialize by copying the init struct, modify at will...

int addentry(void* storagespace){
    static const struct Fileinfo init = {{0},0,0,NULL};
    struct Fileinfo *fi = (struct Fileinfo *)storagespace;
    *fi = init; //cast the pointer to struct pointer and put an empty struct there
    fi->lnlen = 1; //change the lnlen value of the struct to 1
}

Upvotes: 1

Related Questions