C 将指针分配到结构的数组时出错

C 将指针分配到结构的数组时出错,c,malloc,C,Malloc,我试图为指向struct数组的指针分配内存,但它给了我一个奇怪的错误。代码如下: struct command{ int type; char* input; char* output; struct command *command[2]; } 当我尝试为数组大小2分配内存时,我会尝试: temp->command = (command*)malloc(sizeof(struct command[2])); 然而,我得到了这个错误: incompati

我试图为指向struct数组的指针分配内存,但它给了我一个奇怪的错误。代码如下:

struct command{
    int type;
    char* input;
    char* output;
    struct command *command[2];
}
当我尝试为数组大小2分配内存时,我会尝试:

temp->command = (command*)malloc(sizeof(struct command[2]));
然而,我得到了这个错误:

incompatible types when assigning to type âstruct command *[2]â from type âstruct command *â

有什么建议吗?

你需要这样做

for(i=0;i<2;i++)
   temp->command[i] = malloc(sizeof(struct command[i]));
for(i=0;icommand[i]=malloc(sizeof(struct command[i]));

您需要这样做

for(i=0;i<2;i++)
   temp->command[i] = malloc(sizeof(struct command[i]));
for(i=0;icommand[i]=malloc(sizeof(struct command[i]));

您已将
命令声明为指向类型
struct command
的指针的2元素数组,因此不需要为数组分配内存,只需为每个数组元素分配内存,如下所示:

temp->command[i] = malloc( sizeof *temp->command[i] );

您已将
command
声明为指向类型
struct command
的指针的2元素数组,因此不需要为数组分配内存,只需为每个数组元素分配内存,如下所示:

temp->command[i] = malloc( sizeof *temp->command[i] );

如果您希望元素是指向结构数组的指针,那么您可以这样声明和分配

struct command (*command)[2]; /* note the parentheses */

temp->command = malloc(sizeof *temp->command);
…如果希望元素是指针数组,则可以执行以下操作:

struct command *command[2]; /* equivalent to *(command[2]) */

temp->command[0] = malloc(sizeof *temp->command[0]);
temp->command[1] = malloc(sizeof *temp->command[1]);
(请注意,确定“指针数组”与“指针指向数组”的一个好方法是,在运算符优先级和关联性规则的指导下,从变量名向外扩展。例如,如果您的声明是“sometype*myvar[2]”,则应以“myvar是一个由…”组成的数组开始,而不是以“myvar是指向…”的指针开始,因为[]优先级高于*)


错误消息是因为您的CAST指示type ->命令是指向结构体的指针,这是一个冲突,因为您声明它是指向结构体的指针数组。但是,除非使用C++编译器,否则不应该强制转换。

如果您希望元素是指向结构数组的指针,则可以声明和分配类似的结构。这个

struct command (*command)[2]; /* note the parentheses */

temp->command = malloc(sizeof *temp->command);
…如果希望元素是指针数组,则可以执行以下操作:

struct command *command[2]; /* equivalent to *(command[2]) */

temp->command[0] = malloc(sizeof *temp->command[0]);
temp->command[1] = malloc(sizeof *temp->command[1]);
(请注意,确定“指针数组”与“指针指向数组”的一个好方法是,在运算符优先级和关联性规则的指导下,从变量名向外扩展。例如,如果您的声明是“sometype*myvar[2]”,则应以“myvar是一个由…”组成的数组开始,而不是以“myvar是指向…”的指针开始,因为[]优先级高于*)


错误消息是因为您的CAST指示类型->命令是指向结构体的指针,这是一个冲突,因为您声明它是指向结构体的指针数组。但是,除非您使用C++编译器,否则不应该强制转换。<代码> TEMP->命令[0 ] =…<代码>和<代码> TEMP->命令(1)。=…
command成员不是指向结构数组的指针,而是指向结构的两个指针数组。您想做什么?创建一个命令的两元素数组或指向命令的两元素数组?无论如何,为了让malloc满足当前结构定义,您需要这样做他这样施法:(command**)@c-is-best我看清楚了。一个包含两个可分配结构指针的数组。
temp->command[0]=…
temp->command[1]=…
command成员不是指向结构数组的指针,而是指向结构的两个指针数组。您想做什么?创建一个命令的两元素数组或指向命令的两元素数组?无论如何,为了让malloc满足当前结构定义,您需要这样做他这样施展:(command**)@c-is-best这对我来说很清楚。一个包含两个可分配结构指针的数组。因此,当访问command[0]的内容时,我可以使用command[0][0]和command[0][1]是吗?@JessicaMelia-不,那是错的。你最好阅读一些关于指针和结构的基本C文本。@Chinna-你的解决方案看起来是错的。
malloc(sizeof(struct command[i]))
几乎肯定是错的。再想一想;-)--这真的很难吗?你必须分配普通结构,而不是一个数组。因此,当访问命令[0]的内容时,我可以使用命令[0][0]和命令[0][1]对吗?@JessicaMelia-不,那是错误的。你最好阅读一些关于指针和结构的基本C文本。@Chinna-你的解决方案看起来是错误的。
malloc(sizeof(struct command[i])
几乎肯定是错的。再想想;-)--这真的很难吗?你必须分配普通结构,而不是它的数组。