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 :

Probleme avec un define d'un char **


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Mai 2009
    Messages
    66
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 66
    Par défaut Probleme avec un define d'un char **
    Bonjour,
    je rencontre un petit probleme de compilation pour mon code dont voici les sources test:

    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
    #include <stdio.h>
     
    #define COUCOU_TAB {"coucou1", "coucou2"}
    #define COUCOU {0, COUCOU_TAB}
     
    typedef struct  s_test
    {
      int           id;
      char          **tab;
    }               t_test;
     
    int     main()
    {
      t_test        test[] = COUCOU;
     
      printf("test_coucou : %s\n", test[0].tab[0]);
      return (0);
    }
    Je me retrouve toujours avec les memes erreurs :

    test.c:24: warning: missing braces around initializer
    test.c:24: warning: (near initialization for 'test[0]')
    test.c:24: warning: braces around scalar initializer
    test.c:24: warning: (near initialization for 'test[0].tab')
    test.c:24: warning: initialization from incompatible pointer type
    test.c:24: warning: excess elements in scalar initializer
    test.c:24: warning: (near initialization for 'test[0].tab')
    Si vous pourviez me donner un petite piste , sa serait cool car je suis decut depuis pas mal de temps.

    Merci et bonne journee

  2. #2
    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
    Cela vient du fait que la déclaration du champ tab comme char** ne correspond pas à l'initialisation par COUCOU_TAB : COUCOU_TAB correspond à l'initialisation d'un tableau de pointeur sur char.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    typedef struct  s_test
    {
      int           id;
      char          *tab[2]; // au minimum
    } t_test;
    et initialisé de cette façon, avec des chaînes non modifiables, il serait préférable d'avoir
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    typedef struct  s_test
    {
      int           id;
      const char    *tab[2]; // au minimum
    } t_test;

  3. #3
    Membre confirmé
    Inscrit en
    Mai 2009
    Messages
    66
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 66
    Par défaut
    Merci beaucoup pour cette reponse rapide et clair!

    Juste d'un point de vu proprete... C'est pas trop crade de prevoir un minimum?

    (Attention je ne critique pas du tout, c'est juste que sa manque de liberte puisque a la base je fait un moteur de ncurse...et que ses champs correspond aux champs des menus... Dc je serais contrains a limiter le nombre de champ de mes menu...

    Apres si il n'y a pas d'autre solutions... j'en met 4096 et c'est regle)

    Encore merci pour ton aide!

  4. #4
    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
    Si à un moment donné pendant l'exécution, tu connais le nombre d'élements qu'il te faut pour un menu donné, tu peux faire une allocation dynamique de char * (ce qui correspond effectivement à un champ tab en char **), puis initialiser les éléments du tableau ainsi obtenu avec les adresses des messages. (Je te conseille de terminer ton tableau par la valeur NULL qui marquera sa fin).

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. char* => CString probleme avec les accents
    Par kacedda dans le forum MFC
    Réponses: 2
    Dernier message: 26/06/2007, 15h40
  2. Probleme avec #define
    Par Premium dans le forum C
    Réponses: 3
    Dernier message: 26/11/2006, 12h43
  3. [TP] Problème avec les intervalles de char
    Par Petrucci dans le forum Turbo Pascal
    Réponses: 29
    Dernier message: 11/11/2006, 22h19
  4. Probleme avec les char
    Par king67 dans le forum C
    Réponses: 11
    Dernier message: 10/11/2006, 23h15
  5. Réponses: 7
    Dernier message: 06/11/2006, 20h43

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