我正在尝试为指向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 *â
任何建议?
答案 0 :(得分:3)
您已将command
声明为指向struct command
类型的指针的2元素数组,因此您无需为数组分配内存,仅针对每个数组元素,如下所示:
temp->command[i] = malloc( sizeof *temp->command[i] );
答案 1 :(得分:1)
你需要这样做
for(i=0;i<2;i++)
temp->command[i] = malloc(sizeof(struct command[i]));
答案 2 :(得分:0)
如果您希望元素是指向struct数组的指针,那么您可以像这样声明和分配...
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是指向...的指针“,因为[]的优先级高于*。)
错误消息是因为您的演员表明type-&gt;命令是指向struct的指针,这是一个冲突,因为您将其声明为struct的指针数组。但是,除非使用C ++编译器,否则不需要进行强制转换。