为什么它会错误地指定`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
?以及如何解决它们?
您不能像其他结构那样复制flexible array member的结构。
最简单的解决方案是根本不涉及任何复制,通过使用指针作为函数参数的结构。那么结构将不会(不完整)被复制。
使用地址 - 运算符&
从结构创建一个指针。
和函数内部的' - >'运算符。 –
我对C使用ANSI标准。对我有什么建议吗? – dn174822
@ dn174822是的。使用指针。灵活的数组成员是C99标准的一部分(正如你应该知道的,如果你遵循并阅读我的链接),所以它已经在“ANSI C”(如果是“ANSI C”,你的意思是*标准C *)近20年。指针一直是C编程的一个自然部分,包括操作符的地址。 –
你能为我解释一下吗?有一个献身者? – dn174822
另外,灵活数组成员的初始化不符合标准;并且聚合初始化器需要围绕它的括号。你正在使用一些GCC扩展或类似的。 –