是否有可能创建一个在编译时不知道大小的结构?

时间:2013-07-25 18:47:55

标签: c memory data-structures

正如问题所述,我希望在C中创建一个结构,我在编译时不知道它的总大小。

例如,我想创建一个包含计数值的结构和一个包含count元素的数组。我知道这可以实现为:

typedef struct myStruct{
    int count;
    int *myArray;
} myStruct;

但是,我希望这个结构占用一个固体内存块,以便稍后在其上使用memcpy()。像这样:

typedef struct myStruct{
    int count;
    int myArray[count];
} myStruct;

2 个答案:

答案 0 :(得分:5)

听起来你正在寻找灵活的阵列成员:

typedef struct myStruct
{
    int count;
    int myArray[];
} myStruct;

然后,当您稍后分配时:

myStruct *x = malloc(sizeof(myStruct) + n * sizeof(int));
x->count = n;

答案 1 :(得分:2)

是的,你可以。如果你使用C99,那就是flexible array members。否则,你可以做微软所做的事情。获取原始结构定义并将其映射到现有内存块。将指针重新指定给结构定义之后的点。

此外,MS方法将允许多个成员具有可变大小;你只需要正确更新每个指针。

(注意:“MS方法”只是Windows API中经常遇到的问题;我不知道是否有实际的术语。)