这些代码片段都不起作用:
int main() {
struct mystruct {
int a;
char* b;
char* c;
} e,f;
e = {5, "blaat", "boe"};
return 0;
}
错误:'{'令牌
的语法错误
int main() {
struct mystruct {
int a;
char* b;
char* c;
} e,f;
struct mystruct e = {5, "blaat", "boe"};
return 0;
}
错误:之前的'e'声明就在这里
是正确的方法吗?
答案 0 :(得分:4)
复合文字作业是C99的新增内容,语法为
e = (struct mystruct) {5, "blaat", "boe"};
需要使用强制转换表达式。
在C89中,您必须初始化e
作为声明的一部分:
struct mystruct {int a; char *b; char *c} e = {5, "blaat", "boe"};
或
struct mystruct e = {5, "blaat", "boe"};
或者您必须单独指定成员:
struct mystruct e;
e.a = 5;
e.b = "blaat";
e.c = "boe";
答案 1 :(得分:2)
int main() {
struct mystruct {
int a;
char* b;
char* c;
} f;
struct mystruct e = {5, "blaat", "boe"};
return 0;
}
答案 2 :(得分:1)
e = {5, "blaat", "boe"};
这可以在初始化期间仅完成,因为您已经初步化了'e'作为结构声明的一部分,所以您无法跟进它。我推荐Neil's方法。
答案 3 :(得分:0)
一次性初始化成员,如下所示:
int main() {
struct mystruct {
int a;
char* b;
char* c;
} f;
struct mystruct e = {5, "blaat", "boe"};
return 0;
}
或稍后为其分配值,如下所示:
int main() {
struct mystruct {
int a;
char* b;
char* c;
}e,f;
/* a,b,c are initialized with unknown values */
e.a=5; /*Assignment instead of initialization*/
e.b="blaat";
e.c="boe";
return 0;
}
答案 4 :(得分:0)
这有效:
int main() {
struct mystruct {
int a;
char* b;
char* c;
} e = {5, "blaat", "boe"}, f;
return 0;
}