/ / Comment assigner une valeur à un membre struct d'une structure? - c, struct, imbriqué

Comment attribuer une valeur à un membre struct d'une structure? - c, struct, imbriqué

J'apprends à propos des structures imbriquées en C, et quoiJe souhaite pouvoir attribuer une valeur à la structure de membre de ma structure. Je ne parviens pas à comprendre cela et je ne souhaite pas me forcer à initialiser la structure de membre lors de l’initialisation de la structure. Pourquoi est-ce que je continue à avoir une erreur lorsque j'essaie de compiler ce code?

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

Réponses:

5 pour la réponse № 1

À partir de C99, vous pouvez utiliser un littéral composé pour cela:

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

Si vous êtes coincé avec C89, cependant, vous n’avez surtout pas de chance, à moins que vous ne vouliez faire quelque chose comme ceci:

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

Félix souligne dans les commentaires que ni l'un ni l'autre ne sont vraiment initialisation—C’est la seule initialisation quand cela se produit dans la déclaration, ce qui n’est pas le cas ici. Plutôt, les deux sont des missions. Pourtant, cela doit faire ce que vous voulez.


0 pour la réponse № 2

Initialisation est le terme pour donner à une variable une valeur lors de la déclaration. Tout le reste est affectation.

Donc si tu initialiser votre variable, et seulement alors, vous pouvez utiliser un liste d'initialisation (la { }).

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

Sinon, vous pouvez utiliser des initialiseurs désignés:

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