3

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

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

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

但是,我希望这个结构占用一个可靠的内存块,以便我可以memcpy()在以后的时间点上使用它。像这样:

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

2 回答 2

5

听起来您正在寻找灵活的数组成员:

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

然后,当您稍后分配它时:

myStruct *x = malloc(sizeof(myStruct) + n * sizeof(int));
x->count = n;
于 2013-07-25T18:50:37.813 回答
2

是的你可以。如果您使用 C99,则有灵活的数组成员。否则,您可以做微软所做的事情。获取您的原始结构定义并将其映射到现有的内存块。将指针重新分配到结构定义之后的指向。

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

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

于 2013-07-25T18:53:30.177 回答