如何为结构的struct成员赋值?

时间:2015-09-23 06:23:21

标签: c struct nested

我正在学习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"}};
}

2 个答案:

答案 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"
  }
};