具有包含可变大小对象的结构的Malloc

时间:2013-09-12 03:15:53

标签: c arrays struct malloc

我试图创建一个包含文件中每行信息的结构,因此结构的大小取决于文件的长度。 C不喜欢我这样做,

int makeStruct(int x){

    typedef struct
    {
        int a[x], b[x]; 
        char c[x], d[x]; 
        char string[100][x];     
    } agentInfo;

    return 0;
}

我知道我必须使用Malloc,但我不确定是什么。我是否需要Malloc结构和其中的数组?我不知道我对整个结构的看法如何,因为在我知道x之前我不知道它有多大,所以我不能使用size-of?任何帮助赞赏。

1 个答案:

答案 0 :(得分:3)

C结构中不能有多个灵活的数组成员,因此您必须独立分配每个成员的数组:

typedef struct
{
    int *a, *b; 
    char *c, *d; 
    char (*string)[100];     
} agentInfo;

int initStruct(agentInfo *ai, int x)
{
    ai->a = malloc(x * sizeof(int));
    ai->b = malloc(x * sizeof(int));
    ai->c = malloc(x);
    ai->d = malloc(x);
    ai->string = malloc(100 * x);
    return 0;
}

你可以使用它:

agentInfo ai;
initStruct(&ai, 12);