我尝试用某些内容填充联盟的内容,但是我收到错误。这是代码:
struct command
{
int type;
int *input;
int *output;
union{
struct command *command[2];
char **word;
}u;
};
typedef struct command *command_t;
command_t read_command(){
command_t main1 = NULL;
command_t main2 = NULL;
main1->u->word = (char**)malloc(1);
main1->u->word[0] = (char*)malloc(1);
//some other code in here
}
我在“main1-> u-> word =(char **)malloc(1)”中收到错误;“行说:“无效的类型参数â€;â(有“)”
有什么建议吗? thx
答案 0 :(得分:0)
需要main1->u.word = ...
。 (在u
之后点而不是箭头。)
但是您的代码包含编译器找不到的多个其他错误:
你不能在main1和main2中分配任何东西,因为这些指针是NULL
指针。首先为他们分配一些记忆。
第一个malloc只分配一个字节,但你的char*
需要4或8个字节。要使用此工作:
main1->u.word = (char**)malloc(sizeof(char*));
假设您要分配长度为1的char*
数组。
第二个malloc也只分配一个字节。你想在这里存储多少数据?
答案 1 :(得分:0)
main1->u
是一个联合,而不是指向联合的指针,因此您不能在其上使用->
运算符。
此外,您没有为指针分配足够的空间(malloc(1)
返回指向1字节大的内存块的指针,我怀疑这是sizeof(char **)
是什么。您还投放了malloc()
,which is wrong的返回值。你想要的是
main1->u.word = malloc(sizeof(*main->u.word));
main1->u.word[0] = malloc(LENGTH_OF_STRING + 1); // for the NUL terminator
代替。