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 :

Initialiser un tableau à deux dimensions d'une structure


Sujet :

C

  1. #1
    Membre du Club
    Inscrit en
    Février 2008
    Messages
    190
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 190
    Points : 53
    Points
    53
    Par défaut Initialiser un tableau à deux dimensions d'une structure
    Bonsoir,

    J'ai une structure, avec comme vous pouvez le voir un tableau à deux dimensions :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    struct complex {
     
        char *values[2][10];
     
    };
    Comment puis-je initialiser ce tableau ? Car si je déclare ma structure :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     struct complex MaStruct;
    Et que je fais ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MaStruct.values[2][10] = { {"rrr"} {"kjkjnkjn"} }
    Ca ne fonctionne pas (je fais la version courte, j'ai bien deux lignes de 10 emplacements à remplir...

    Merci pour vos réponses.

    PS : j'ai aussi essayé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MaStruct.values = { {"rrr"} {"kjkjnkjn"} }
    EDIT : je précise que mon initialisation fonctionné avant que je change de place ce tableau pour l'intégrer à la structure.

  2. #2
    Membre éclairé Avatar de srvremi
    Homme Profil pro
    Directeur d'école d'ingénieurs
    Inscrit en
    Mars 2002
    Messages
    554
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Directeur d'école d'ingénieurs
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2002
    Messages : 554
    Points : 656
    Points
    656
    Par défaut
    La syntaxe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    { {"rrr"} {"kjkjnkjn"} }
    est faite pour déclarer statiquement un tableau. Dans ton cas il est déjà déclaré statiquement.

    Donc il faut faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    MaStruct.values[0][0]=malloc(4*sizeof(char));
    strcpy(MaStruct.values[0][0],"rrr");
    MaStruct.values[0][1]=malloc(9*sizeof(char));
    strcpy(MaStruct.values[0][1],"kjkjnkjn");
    @+
    Rémi

  3. #3
    Membre du Club
    Inscrit en
    Février 2008
    Messages
    190
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 190
    Points : 53
    Points
    53
    Par défaut
    Citation Envoyé par srvremi Voir le message
    La syntaxe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    { {"rrr"} {"kjkjnkjn"} }
    est faite pour déclarer statiquement un tableau. Dans ton cas il est déjà déclaré statiquement.

    Donc il faut faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    MaStruct.values[0][0]=malloc(4*sizeof(char));
    strcpy(MaStruct.values[0][0],"rrr");
    MaStruct.values[0][1]=malloc(9*sizeof(char));
    strcpy(MaStruct.values[0][1],"kjkjnkjn");
    @+
    Rémi
    Bon je ne peux pas encore tester mon programme dans son ensemble mais ça à l'air correct. J'espéré une méthode plus simple
    Mais je ne vois pas comment j'aurais pu faire autrement... J'ai vérifié du côté des énumérations mais ça posé quelques problèmes (me semble t'il).

    Merci pour ton aide.

  4. #4
    Expert éminent sénior
    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
    Points : 13 926
    Points
    13 926
    Par défaut
    Comment puis-je initialiser ce tableau ? Car si je déclare ma structure :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    struct complex MaStruct;
    Et que je fais ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MaStruct.values[2][10] = { {"rrr"} {"kjkjnkjn"} }
    Ce n'est pas une initialisation, mais une affectation.

    Si il s'agit de créer une telle structure et de l'initialiser :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    struct complex MaStruct = { "rrr" , "kjkjnkjn" };
    Note : Si il s'agit d'avoir une structure contenant deux chaines de caractères, et non pas 2*10 pointeurs sur char
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    struct complex { 
        char values[2][10];
    };
    Avec le même code pour créer et initialiser.

  5. #5
    Membre du Club
    Inscrit en
    Février 2008
    Messages
    190
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 190
    Points : 53
    Points
    53
    Par défaut
    Citation Envoyé par diogene Voir le message
    Ce n'est pas une initialisation, mais une affectation.
    Oui, une affectation, c'est bien se que je voulais dire j'ai pas vu mon erreur, merci.

    Si il s'agit de créer une telle structure et de l'initialiser :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    struct complex MaStruct = { "rrr" , "kjkjnkjn" };
    Note : Si il s'agit d'avoir une structure contenant deux chaines de caractères, et non pas 2*10 pointeurs sur char
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    struct complex { 
        char values[2][10];
    };
    Avec le même code pour créer et initialiser.
    [/quote]

    J'ai pourtant essayé mais sans succès.

    PS : oui mais cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    struct complex MaStruct = { "rrr" , "kjkjnkjn" };
    C'est quand tu n'as qu'un tableau dans ta structure, non ?

    Si tu as :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    struct maStructure {
     
    char *monTableau[][];
     
    int unNombre;
    int unAutre;
    // etc...
     
    }
    Tu es bien obligé de passer par la méthode de srvremi ? Non ?

  6. #6
    Expert éminent sénior
    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
    Points : 13 926
    Points
    13 926
    Par défaut
    - D'abord, est-ce que la structure doit contenir un tableau de chaines de caractères (en l'occurrence 2 chaines de 9 caractères au plus) ou un tableau 2D de pointeurs sur char (en l'occurrence, 2 tableaux de 10 pointeurs) ?

    - Si tu n'initialises pas explicitement les autres champs, ils seront initialisés par défaut (0 pour des int)

  7. #7
    Membre du Club
    Inscrit en
    Février 2008
    Messages
    190
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 190
    Points : 53
    Points
    53
    Par défaut
    Un tableau 2D de pointeurs sur char (en l'occurrence, 2 tableaux de 10 pointeurs).

Discussions similaires

  1. Réponses: 0
    Dernier message: 04/05/2011, 14h50
  2. Comment passer un tableau à deux dimensions dans une fonction
    Par Niko_de_bordo dans le forum Débuter
    Réponses: 2
    Dernier message: 02/07/2009, 15h15
  3. initialiser un tableau à deux dimensions
    Par bandit_debutant dans le forum Collection et Stream
    Réponses: 3
    Dernier message: 10/06/2008, 12h55
  4. Passage de tableau à deux dimensions dans une session
    Par keumlebarbare dans le forum Servlets/JSP
    Réponses: 7
    Dernier message: 28/11/2006, 18h42
  5. Réponses: 22
    Dernier message: 18/07/2006, 18h58

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