IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

Compter le nombre de champs d'une structure


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    218
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 218
    Par défaut Compter le nombre de champs d'une structure
    Bonsoir
    est il possible a l'exécution de détecter nombre de champs dans un structure
    en langage C ?

    si j'ai ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    typedef struct
    {
        char maitresse[30];
        char nom[4];
        int age_entree;
        int effectif;
     
    }
    Je devrais avoir 4 champs

    Comment cela fonctionerais si j'ai :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
    typedef struct
    {
        char maitresse[30];
        char nom[4];
        int age_entree;
        int effectif;
        Eleve_t eleves[32];//effectif_max
    }
     
    typedef struct {
            char nom[15];
            char prenom[15];
            Date_t naissance;
            char parents[50];
            char adresse[60];
            char tel[11];
        } Eleve_t
     
     
    struct date
    {
        int jour;
        int mois;
        int an;
    };
    }

    je devrais avoir 12 champs

    De même est il possible de détecter le type en langage C ?
    avez vous un petit exemple ?

    Merci de vos avis

  2. #2
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    non

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    218
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 218
    Par défaut
    re Bonsoir,

    je me référè a la fonction fwrite

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    size_t fwrite(const void * tab,size_t taille,taille_objet,size_t nb_objet)
    Quand je fais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    typedef struct
    {
        char maitresse[30];
        char nom[4];
        int age_entree;
        int effectif;
     
    }TClasse
     
    TClasse Classe;
    FILE *ptr_file;
     
    Init(&Classe); // structure initialisée avec le données
     
      ptr_file= fopen("test","w");
     
      fwrite(&Classe,sizeof(TClasse),1,ptr_file);
    fclose(ptr_file);

    Dans l'appel de fwrite(&Classe,....,....,....);
    il ne connait pas le nombres de champ dans la structure
    comment fait il pour détecter cela ?

    Désolé je débute

    merci

  4. #4
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    il ne connait pas les champs, mais la TAILLE de la structure.. C'est tout ce dont il a besoin...

  5. #5
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 977
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 977
    Par défaut
    Gio,

    Dans ton exemple, il n'est pas question du nombre de champs, mais de la taille de la structure, ce qui est tout à fait différent.

  6. #6
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 865
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 865
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par o_live Voir le message
    re Bonsoir,

    je me référè a la fonction fwrite

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    size_t fwrite(const void * tab,size_t taille,taille_objet,size_t nb_objet)
    Quand je fais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    typedef struct
    {
        char maitresse[30];
        char nom[4];
        int age_entree;
        int effectif;
     
    }TClasse
     
    TClasse Classe;
    FILE *ptr_file;
     
    Init(&Classe); // structure initialisée avec le données
     
      ptr_file= fopen("test","w");
     
      fwrite(&Classe,sizeof(TClasse),1,ptr_file);
    fclose(ptr_file);

    Dans l'appel de fwrite(&Classe,....,....,....);
    il ne connait pas le nombres de champ dans la structure
    comment fait il pour détecter cela ?

    Désolé je débute

    merci
    Pour faire suite aux réponses de souviron34 et droggo, une structure ce sont des octets contigus. Si tu pars du premier et que tu comptes sizeof(struct) ben tu arriveras à la fin de ta structure.
    Le danger du write() tel que tu l'écris, c'est que certains compilos rajoutent des octets dans la structure pour l'optimier en l'alignant sur des mots. Mais la façon de rajouter ces octets dépend de l'architecture système. Donc si tu t'amuses à faire du write() et read() pour sauvegarder et restaurer tes data, ça marchera mais que sur l'ordi où t'as compilé. Tu pourras pas sauvegarder, transférer un fichier sur un autre ordi et restaurer là bas.

    Une façon de faire plus portable est de te définir une fonction "sauvegarde" et "restauration" associée à ta structure où chaque fonction manipulera les membres de façon individuelle...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

Discussions similaires

  1. [AC-2007] Compter le nombre de champs ayant une certaine valeur
    Par tomatotep dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 20/06/2012, 12h01
  2. tJavaFlex : compter le nombre de champs égaux à une certaine valeur
    Par jeanphi45 dans le forum Développement de jobs
    Réponses: 5
    Dernier message: 05/03/2010, 15h13
  3. Compter le nombre de champs d'une table
    Par alexsimps dans le forum SQL Procédural
    Réponses: 1
    Dernier message: 22/07/2007, 09h03
  4. Compter le nombre de champs (cut ?)
    Par orafrance dans le forum Shell et commandes GNU
    Réponses: 5
    Dernier message: 08/05/2007, 14h46
  5. Nombre de champs d'une table
    Par cege dans le forum Access
    Réponses: 4
    Dernier message: 25/01/2005, 18h57

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo