简体   繁体   中英

pointer to struct in struct in c

I have trouble with structures in c.

I have two structures like

typedef struct
{
    char isim[256];
    int deger;
    struct ekstra *sonra;
}ekstra;

typedef struct
{
    char *name;
    int val;
    struct ekstra *next;
}node;

/*and main is*/

int main()
{
    int i;
    node dizi[12];

    for(i=0;i<12;i++)
    {
        dizi[i].name = malloc("asdasd"*sizeof(int));
        strcpy (dizi[i].name,"asdasd");
        /*and trouble starts here*/
        **dizi[i].next = malloc(sizeof(ekstra));
        printf("%s",dizi[i].next->isim);**
    } 
}

the error is

error: dereferencing pointer to incomplete type

How can I hold place for dizi[i].next ?

struct ekstra is not the same as ekstra .

Your first struct typedef should be declared as follows:

typedef struct ekstra
{
    char isim[256];
    int deger;
    struct ekstra *sonra;
}ekstra;

typedef struct... ekstra;

This means: "create a type that is called ekstra". From now on this type can be used just as any variable type (int, char etc).

struct ekstra *next;

This means: Somewhere in my program there is a struct of some type, I don't know what it contains, but I want to point to an element of that type. This is the meaning of incomplete type .

To fix your problems, simply replace this row with ekstra *next; .


More comments not directly related to the question:

dizi[i].name = malloc("asdasd"*sizeof(int));

This is pure nonsense code. It means: "Create a constant string literal in the ROM part of my program. In this constant string literal, store the letters "asdasd" and a null termination character. Then take the address of this ROM memory location, which is completely irrelevant to my application, convert it to an integer so that I get a 32-bit nonsense number. Then multiply this nonsense number with the sizeof an int, which doesn't make any sense to anyone either. Then take this completely nonsense result and allocate a random amount of dynamic memory based on this. Then watch the program crash.

I don't understand code line like

malloc("asdasd"*sizeof(int));

But, I think you problem should slove like this

dizi[i].next = (ekstra *)malloc(sizeof(ekstra));

and you struct define should like

typedef struct node{
    int a;
    int b;
    struct node *next;
}node;

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM