-1

我尝试用一​​些东西填充联合的内容,但是我收到一个错误。这是代码:

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);”中出现错误 行说:“无效的类型参数â->â(有âunionâ)”

有什么建议吗?谢谢

4

2 回答 2

0

它需要是main1->u.word = ...。(点而不是之后的箭头u。)

但是您的代码包含编译器找不到的多个其他错误:

您不能分配给 main1 和 main2 中的任何内容,因为这些指针是NULL指针。先给他们分配一些内存。

第一个 malloc 只分配一个字节,但您char*需要 4 或 8 个字节。为了使这项工作使用:

main1->u.word = (char**)malloc(sizeof(char*));

假设您要分配char*长度为 1 的数组。

第二个 malloc 也只分配一个字节。你想在这里存储多少数据?

于 2013-07-01T20:32:09.517 回答
0

main1->u是一个联合,而不是一个指向联合的指针,因此您不能->在其上使用运算符。

此外,您没有为指针分配足够的空间(malloc(1)返回一个指向 1 字节大的内存块的指针,我怀疑那是什么sizeof(char **))。您也在转换 的返回值malloc()这是错误的。你想要的是

main1->u.word = malloc(sizeof(*main->u.word));
main1->u.word[0] = malloc(LENGTH_OF_STRING + 1); // for the NUL terminator

反而。

于 2013-07-01T20:33:09.163 回答