为什么它会错误地指定`struct`?

问题描述:

我在C语言中创建了一个简单struct,我的数据存储:为什么它会错误地指定`struct`?

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

而且,对于分配值这个结构体变量,我用这个代码:

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?以及如何解决它们?

+0

你能为我解释一下吗?有一个献身者? – dn174822

+0

另外,灵活数组成员的初始化不符合标准;并且聚合初始化器需要围绕它的括号。你正在使用一些GCC扩展或类似的。 –

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

最简单的解决方案是根本不涉及任何复制,通过使用指针作为函数参数的结构。那么结构将不会(不完整)被复制。

使用地址 - 运算符&从结构创建一个指针。

+0

和函数内部的' - >'运算符。 –

+0

我对C使用ANSI标准。对我有什么建议吗? – dn174822

+0

@ dn174822是的。使用指针。灵活的数组成员是C99标准的一部分(正如你应该知道的,如果你遵循并阅读我的链接),所以它已经在“ANSI C”(如果是“ANSI C”,你的意思是*标准C *)近20年。指针一直是C编程的一个自然部分,包括操作符的地址。 –