填写联合内容产生错误

时间:2013-07-01 20:28:08

标签: c typedef unions

我尝试用某些内容填充联盟的内容,但是我收到错误。这是代码:

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

2 个答案:

答案 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

代替。