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 :

Tableau dans typedef


Sujet :

C

Vue hybride

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

    Informations forums :
    Inscription : Avril 2010
    Messages : 152
    Par défaut Tableau dans typedef
    Bonjour,
    J'ai le typedef suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    typedef struct{
    int nbcoups;
    coup coups[];
    }parties;
    avec coup :
    Dans une fonction, j'ai besoin de retourner un objet de type partie, je dois donc affecter des valeurs à nbcoups et à coups[].
    Pas de problème pour nbcoups, cependant je n'arrive pas à remplir le tableau coups[].
    Quelqu'un aurait une solution pour ça ?

    Merci d'avance.

  2. #2
    Membre Expert
    Avatar de kwariz
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Octobre 2011
    Messages
    898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2011
    Messages : 898
    Par défaut
    Salut,

    ton tableau coup dans la struct parties est un tableau flexible (type tableau incomplet en dernier membre d'une structure), cela requiert des allocations un peu différentes. Peux-tu nous montrer un peu ton code ?
    Pourquoi n'utilises-tu pas un pointeur sur coup à la place ?

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 152
    Par défaut
    J'ai essayé ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    partie p;
    p.nb = 5;
     
    p.coups = malloc(sizeof(coup)*p.nb)
    et j'ai une erreur à l'execution :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    invalide use of flexible array member

  4. #4
    Membre Expert
    Avatar de kwariz
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Octobre 2011
    Messages
    898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2011
    Messages : 898
    Par défaut
    Je pense que le plus simple pour toi est de définir :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    typedef struct{
    int nbcoups;
    coup* coups;
    }parties;
    Ce sera plus simple si tu veux faire des mallocs sur coups.

  5. #5
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    Tu as le choix :

    1- En utilisant un pointeur pour le champ coups comme indiqué par kwariz. Dans ce cas, le tableau n'est pas inclus dans la structure, seule son adresse l'est.

    2- En utilisant un "flexible array", comme dans ta définition initiale. Dans ce cas, le tableau est inclus dans la structure et il faut en tenir compte à la création d'un objet de ce type. Exemple :
    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
    #include <stdlib.h>
    typedef char coup[3];
    typedef struct
    {
       int nbcoups;
       coup coups[];
    }parties;
    /*------------------------------*/
    int main(void)
    {
     int n = 3;
     parties * p = malloc(sizeof(parties)+ sizeof(coup)*n);
     p->nbcoups = n;
     p->coups[2][2] = 22;
     p->coups[1][1] = 11;
     p->coups[0][1] = 10;
     free(p);
     return 0;
    }

Discussions similaires

  1. Tableau dans une interface idl
    Par Polochon2001 dans le forum CORBA
    Réponses: 2
    Dernier message: 14/05/2004, 09h44
  2. [langage] Tableau dans hashage
    Par iago dans le forum Langage
    Réponses: 2
    Dernier message: 26/01/2004, 16h19
  3. Réponses: 6
    Dernier message: 26/01/2003, 13h45
  4. [VB6]Passage d'un tableau dans une DLL écrite en delphi
    Par flash dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 20/09/2002, 10h15
  5. Réponses: 2
    Dernier message: 27/05/2002, 19h46

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