在无法访问内部结构的文件中声明的结构内的结构

时间:2014-03-24 13:13:18

标签: c linux struct

我创建了一个msgbuf.h文件,如下所示:

//msgbuf.h
typedef struct msgbuf1
{
    long    mtype;
    M1      *m;
} message_buf;

typedef struct msgclient
{
    int msglen;
    int msgtype;
    char cp[100];
}M1;

一个程序作为check.c。以下编程给出了没有M1的错误。为什么会这样?我做错了什么? 我认为文件“msgbuf.h”的内容应该在prog check.c中复制,程序运行正常。请让我知道。

//check.c
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include"msgbuf.h"

int main()
{
    message_buf *sbuf;
    sbuf=malloc(sizeof(sbuf));
    sbuf->m=malloc(sizeof(M1));
    sbuf->m->msglen=10;
    printf("\n%d",sbuf->m->msglen);
    printf("\n %d",sizeof(sbuf->m));
    return 0;
}

谢谢:)

2 个答案:

答案 0 :(得分:3)

简单,在M1之前声明message_buf;

typedef struct msgclient
{
    int msglen;
    int msgtype;
    char cp[100];
}M1;

typedef struct msgbuf1
{
    long    mtype;
    M1      *m;
} message_buf;

在这个问题下面阅读凯尔塔尔的评论。

答案 1 :(得分:3)

您应该在使用之前声明M1:

//msgbuf.h
typedef struct msgclient
{
   int msglen;
   int msgtype;
   char cp[100];
}M1;

typedef struct msgbuf1
{
    long    mtype;
    M1      *m;
} message_buf;