正如问题所述,我希望在C中创建一个结构,我在编译时不知道它的总大小。
例如,我想创建一个包含计数值的结构和一个包含count元素的数组。我知道这可以实现为:
typedef struct myStruct{
int count;
int *myArray;
} myStruct;
但是,我希望这个结构占用一个固体内存块,以便稍后在其上使用memcpy()
。像这样:
typedef struct myStruct{
int count;
int myArray[count];
} myStruct;
答案 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中经常遇到的问题;我不知道是否有实际的术语。)