我正在学习C语言中的嵌套结构,我想要做的是能够为结构的成员结构赋值。我无法搞清楚这一点,我不想强迫自己在结构初始化中初始化成员结构。当我尝试编译此代码时,为什么一直出现错误?
main.c: In function 'main':
main.c:16:23: error: expected expression before '{' token
fooPerson.fullname = {"Foo", 'B', "Baz"};
#define LEN 20
struct names {
char first[LEN];
char middle;
char last[LEN];
};
struct person {
struct names fullname;
};
int main() {
struct person fooPerson;
fooPerson.fullname = {"Foo", 'B', "Baz"};
// NOT this: it works, but not the solution I'm asking for
// struct person fooPerson = {{"Foo", 'B', "Baz"}};
}
答案 0 :(得分:5)
从C99开始,您可以使用复合文字:
fooPerson.fullname = (struct names){ "Foo", 'B', "Baz" };
如果你坚持使用C89,那么你大部分都不走运,除非你想做这样的事情:
{
struct names n = { "Foo", 'B', "Baz" };
fooPerson.fullname = n;
}
Felix在评论中指出,这些都不是真正的初始化 - 当它作为声明的一部分发生时才进行初始化,这不是这里的情况。相反,两者都是作业。不过,这应该做你想做的事。
答案 1 :(得分:0)
初始化是在声明时为变量赋值的术语。其他一切都是赋值。
因此,如果您初始化您的变量,那么您只能使用初始化列表({ }
)。
struct person fooPerson = { {"Foo", 'B', "Baz"} };
或者,您可以使用指定的初始值设定项:
struct person fooPerson =
{
.fullname =
{
.first = "Foo",
.middle = 'B',
.last = "Baz"
}
};