指向struct中struct的结构

时间:2012-06-05 13:39:38

标签: c pointers dynamic struct

我在c中遇到结构问题。

我有两个结构,比如

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);**
    } 
}

错误是

  

错误:取消引用指向不完整类型的指针

我如何为dizi[i].next安排?

3 个答案:

答案 0 :(得分:8)

struct ekstraekstra不同。

您的第一个struct typedef应声明如下:

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

答案 1 :(得分:0)

  

typedef struct ... ekstra;

这意味着:“创建一个名为ekstra的类型”。从现在开始,这种类型可以像任何变量类型一样使用(int,char等)。

  

struct ekstra * next;

这意味着:在我的程序中的某个地方有一个类型的结构,我不知道它包含什么,但我想指向该类型的元素。这是不完整类型的含义。

要解决您的问题,只需将此行替换为ekstra *next;


更多评论与此问题没有直接关系:

  

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

这是纯粹的无意义代码。它意味着:“在我的程序的ROM部分创建一个常量字符串文字。在这个常量字符串文字中,存储字母”asdasd“和一个空终止字符。然后取这个ROM内存的地址 location,这与我的应用程序完全无关,将它转换为一个整数,这样我得到一个32位的无意义数字。然后将这个无意义的数字与int的sizeof相乘,这对任何人都没有任何意义。然后采取这完全是无意义的结果,并根据此分配随机数量的动态内存。然后观察程序崩溃。

答案 2 :(得分:-1)

我不懂代码行

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

但是,我认为你的问题应该像这样解决问题

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

你的结构定义应该像

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