为什么它会导致`struct`的赋值出错?

时间:2017-10-15 12:00:48

标签: c arrays struct char

我用C语言创建了一个简单的struct,用于存储我的数据:

typedef struct
{
    int n;
    char *c[];
} simstr;

并且,对于此struct变量的赋值,我使用了以下代码:

simstr ex =
{
    5,

    "ex_11",
    "ex_12",
    "ex_13",
    "ex_14",
    "ex_15"
};

为了测试是否正确创建了ex变量,我运行了这个函数:

void funct(simstr a)
{
    int i,
        n = a.n;

    for (i = 0; i < n; i++)
    {
        printf("%s\n", a.c[i]);
    }
}

funct(ex);

我成功编译了它。不幸的是,它返回2行Θ&;然后,由于运行时错误,该程序停止。

你能否告诉我:为什么它会因为struct的分配而出错?以及如何解决它们?

1 个答案:

答案 0 :(得分:2)

您不能像其他结构一样复制flexible array member的结构。

最简单的解决方案是将指针作为函数参数用于结构,完全不涉及任何复制。然后结构将不会(不完整)复制。

使用address-of运算符&从结构中创建指针。