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

How to assign value to a struct member of a struct?

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

从 C99 开始,您可以为此使用复合文字:

fooPerson.fullname = (struct names){ "Foo", 'B', "Baz" };

不过,如果你被 C89 困住了,那你就很不走运了,除非你想做这样的事情:

{
    struct names n = { "Foo", 'B', "Baz" };
    fooPerson.fullname = n;
}

Felix 在评论中指出,这些都不是真正的 初始化 — 它只是作为声明的一部分发生的初始化,而这里不是这种情况。相反,两者都是任务。不过,这应该可以满足您的需求。

初始化 是在声明时给变量赋值的术语。其他都是作业.

因此,如果您初始化您的变量,并且只有在那时,您才能使用初始化列表{ }) .

struct person fooPerson = { {"Foo", 'B', "Baz"} };

或者你可以使用指定的初始值设定项:

struct person fooPerson =
{
  .fullname = 
  { 
    .first  = "Foo",
    .middle = 'B',
    .last   = "Baz"
  }
};