How to create a new instance of a struct in C

Robin Huang picture Robin Huang · Sep 15, 2015 · Viewed 75.6k times · Source

In C, when you define a struct. What is the correct way to create a new instance? I've seen two ways:

struct listitem {
    int val;
    char * def;
    struct listitem * next;
};

The first way (xCode says this is redefining the struct and wrong):

    struct listitem* newItem = malloc(sizeof(struct listitem));

The second way:

    listitem* newItem = malloc(sizeof(listitem));

Alternatively, is there another way?

Answer

Prog_is_life picture Prog_is_life · Sep 15, 2015

It depends if you want a pointer or not.

It's better to call your structure like this :

typedef struct s_data 
{
    int a;
    char *b;
    // etc..
} t_data;

After to instanciate it for a no-pointer structure :

t_data my_struct;
my_struct.a = 8;

And if you want a pointer you need to malloc it like that :

t_data *my_struct;
my_struct = malloc(sizeof(t_data));
my_struct->a = 8

I hope this answers your question.