Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 19/06/2019, à 17:22

chris7522

Structure de structure (C)

Bonjour a toutes et a tous ,
    Je ne comprends pas 2 choses :
  Pourquoi la declaration de ma 1ere structure se trouve dans la seconde ( ainsi une structure peu devenir une variable dans une autre structure ?)
  Quel est le role de la fonction strcpy dans le code ?
Merci de votre aide précieuse .

   

#include <stdio.h>
#include <string.h>

int main()
{
    struct date
    {
        int month;
        int day;
        int year;
    };
    struct human
    {
        char name[45];
        struct date birthday;
    };
    struct human president;

    strcpy(president.name,"George Washington");
    president.birthday.month = 2;
    president.birthday.day = 22;
    president.birthday.year = 1732;

    printf("%s was born on %d/%d/%d\n",
            president.name,
            president.birthday.month,
            president.birthday.day,
            president.birthday.year);

    return(0);
}

Hors ligne

#2 Le 19/06/2019, à 17:35

Zakhar

Re : Structure de structure (C)

Oui, bien sûr une structure peut contenir tout autre élément, dont une autre structure.

man strcpy

Comme son nom l'indique, ça copie une chaîne. (str = string = chaîne en anglais), et cpy comme copy.

En l'occurrence ce qui est fait là est une très mauvaise pratique, on devrait plutôt avoir :

strncpy(president.name,"George Washington", sizeof(president.name));

puis

printf("%.*s", sizeof(president.name),president.name);

... histoire d'éviter les débordements mémoire si toutefois la zone réceptrice était trop petite.
Alternativement, on peut forcer un zéro binaire en dernière position de president.name pour être sûr que la chaîne est terminée, et conserver le printf en l'état.

Eviter les "débordement" mémoire est l'essentiel en C si on ne veut pas avoir des trucs qui sont tout de suite hors de contrôle !..

Dernière modification par Zakhar (Le 19/06/2019, à 17:42)


"A computer is like air conditioning: it becomes useless when you open windows." (Linus Torvald)

Hors ligne

#3 Le 19/06/2019, à 17:38

pingouinux

Re : Structure de structure (C)

Bonjour,

chris7522 a écrit :

Pourquoi la declaration de ma 1ere structure se trouve dans la seconde ( ainsi une structure peu devenir une variable dans une autre structure ?)

Une structure est un type de variable comme un autre, construit à partir des types de base.

Quel est le role de la fonction strcpy dans le code ?

Le premier réflexe doit être de faire

man strcpy

Hors ligne

#4 Le 19/06/2019, à 22:39

chris7522

Re : Structure de structure (C)

Merci a tous les deux de votre aide smile

Hors ligne