Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C中声明后初始化结构数组的大小?_C - Fatal编程技术网

在C中声明后初始化结构数组的大小?

在C中声明后初始化结构数组的大小?,c,C,我做了一些搜索,但没有找到任何东西能回答我关于结构的问题: 在我的程序中,我有两个结构:一个包含数据,另一个包含第一个结构的数组(用于使返回结构数组更容易) 在运行几行代码之前,我不知道上述结构数组的大小。从我发现的情况来看,在声明数组(或任何类型)之后,没有办法定义它的大小,尽管我想知道这是否适用于结构 如果没有,是否有方法在不使用malloc的情况下定义结构中先前声明的数组的大小?将malloc与struct数组一起使用似乎有点复杂,我还不能完全理解它 typedef struct {

我做了一些搜索,但没有找到任何东西能回答我关于结构的问题:

在我的程序中,我有两个结构:一个包含数据,另一个包含第一个结构的数组(用于使返回结构数组更容易)

在运行几行代码之前,我不知道上述结构数组的大小。从我发现的情况来看,在声明数组(或任何类型)之后,没有办法定义它的大小,尽管我想知道这是否适用于结构

如果没有,是否有方法在不使用malloc的情况下定义结构中先前声明的数组的大小?将malloc与struct数组一起使用似乎有点复杂,我还不能完全理解它

typedef struct
{
    char **data;
} struct1;

typedef struct
{
    struct1 data[];
} struct2;

int main(int argc, char **argv)
{
    //Pretend there is code here that finds the size I need
    size = 5;
    struct2 Info;
    Info.data = new struct1[size]; //Clearly this won't work, but does C offer anything comparable?

    return 0;
}

如果数据序列的长度仅在运行时确定,则应使用malloc。除非您展示您的声明和一些代码或示例,否则很难提供更多的帮助。这个问题不是很清楚。结构中可以有一个灵活的数组成员,也可以有可变长度的数组。你到底想做什么?
struct2*s2p=malloc(offsetof(struct2,data)+sizeof(struct1)*size))
。现在有一个
struct2*
指向一个对象,该对象可以用作包含
size
struct1
s的
struct2
。@Lance\P:代码段中的语法应该是正确的。一个问题可能是
struct2
必须包含多个命名成员(灵活数组成员必须是最后一个成员),因此必须将
struct2
更改为
{char dummy;struct1 data[];}