2013-07-02 144 views
0

我想分配内存指针结构数组,但它给了我一个奇怪的错误。下面的代码:错误分配指针数组结构

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 *â 

什么建议吗?

+0

'temp-> command [0] = ...'和'temp-> command [1] = ...' –

+0

'command'成员不是指向结构数组的指针,它是一个数组两个指向结构的指针。 –

+0

你想做什么?创建一个2元素的命令数组或者一个2元素的指向数组的指针?在任何情况下,为了使malloc满足当前结构定义,您需要像这样进行演员制作:(command **) –

回答

1

你需要做这样的

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

+我觉得你抓到了正确, –

+0

所以,当访问命令[0]的内容时,我可以用命令[0] [0]和命令[0] [1]对它进行操作吗? –

+1

@JessicaMelia - 不,那是错误的。你应该更好地阅读关于指针和结构的一些基本的C语言文本。 –

3

您已经声明command为指针的2个元素的数组键入struct command,所以你不需要为阵列分配内存,只是对于每个数组元素,像这样:

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

如果你想要的元素是一个指针结构数组,那么你可以声明和分配是这样的...

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]); 

(需要注意的是一个很好的方式,以确定“指针数组” VS “指向数组的指针”是根据运算符优先级和关联性规则,从变量名向外工作。例如,如果你的声明是“sometype * myvar [2]”,你将以“myvar是一个数组......”而不是“myvar是指向...的指针”开始,因为[]比*有更高的优先级。 )

错误信息是因为你的转换表明type-> command是一个指向struct的指针,这是因为你声明了它是一个指向struct的指针数组。但是,除非您使用C++编译器,否则不需要进行强制转换。