如何为结构的结构成员赋值?
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"
}
};
我正在学习 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"
}
};