I have an assignment that is making me lose valuable hours without success. I have to read the contents from a struct that is passed to a function as void *c. I can read its contents without problems except the field that is a pointer to another struct. Example code:
#include <sys/types.h>
#include <stdio.h>
#include <stdlib.h>
typedef struct Car Car;
struct Car {
        int     year;
        int     type;
        int     free;
        struct {
                char    *name;
                char    *city;
        } *facility;
};
int main()
{
    Car *c = malloc(sizeof(Car)*2);
    c->year = 2020;
    c->type = 2;
    c->free = 1;
    c->facility = malloc(200);
    c->facility->name = malloc(10);
    c->facility->city = malloc(10);
    snprintf(c->facility->name, 5, "Test");
    snprintf(c->facility->city, 5, "Test");
    test(c);
}
int test(void *c)
{
    int year = *(void **) c;
    int type = *(void **) (c+4);
    int free = *(void **) (c+4+4);
    printf("Year %d\n",year);
    printf("Type %d\n",type);
    printf("Free %d\n",free);
    void *facility;
    facility = *(void **) (c+4+4+4);
    printf("Facility name %s", *(void **) facility);
    printf("Facility city %s", *(void **) facility+8);
}
The part I am unable to read is facility name and facility city. I know I can access easily using -> but the assignment asks precisely understand how structure is defined in memory and extract its contents directly using the void*. Thanks.
 
     
    