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 de char*


Sujet :

C

  1. #1
    Membre averti
    Inscrit en
    Avril 2006
    Messages
    18
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Avril 2006
    Messages : 18
    Par défaut tableau de char*
    Bonjour, je suis un naze en C mais j'aimerais utiliser une tableau de string ou a chaque indice correspondrait une couleur. Exemple
    Ce tableau doit avoir 7 couleurs que je connais à l'avance. Comment s'il vous plait déclarer et utiliser ce tableau à l'aide de ses indices ?

    exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    char* getCouleur(int n,char ** colors)
    Je n'y arrive vraiment pas.

    Merci de votre aide.

  2. #2
    Membre éclairé Avatar de Biosox
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    298
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 298
    Par défaut
    si tu connais à l'avance la taille et les couleurs du tableau, tu peux simplement le déclarer comme ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    char * tableau[7] = {
    "rouge",
    "bleu",
    "vert",
    "orange",
    "jaune",
    "rose"
    "mauve"
    };

  3. #3
    Membre éclairé Avatar de GyZmoO
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    428
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2006
    Messages : 428
    Par défaut
    Bonjour.

    Tu peux faire un truc de ce style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     
    char **tableau;
    tableau = malloc(sizeof(char *) * 7);
    En testant bien entendu le retour du malloc. Aprés pour chaque case de ce tableau tu fais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    tableau[0] = malloc(sizeof(char) * N);
    N étant la longueur de la chaine de caractères ("rouge", "jaune" etc...) .

    En espérant t'avoir été utile

    ++


    [EDIT] A ben oué je suis bête pas besoin de s'embeter avec des allocs dynamiques si on connait a l'avance la taille . . . [/EDIT]

  4. #4
    Expert confirmé
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Par défaut
    Par contre avec le code de Biosox, apres tu ne peux pas modifier les couleurs.
    Donc mieux vaut rajouter un const

  5. #5
    Membre averti
    Inscrit en
    Mai 2006
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 53
    Par défaut
    bonjour,
    je ne sais pas si j'ai bien compris votre problème.
    ce que je vous propose permet de remplir une table avec des couleur puis réaliser la fonction getColor qui permet de donner la couleur d'indice i de la table précedente:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    #include<stdio.h>
     char* getColor(int i, char* tab[7])
      { return(tab[i]);
      }
     main()
     {char* tab[7];
      tab[0]="rouge";
      tab[1]="vert";
      tab[2]="bleu";
      /*continuer le remplissage de la table*/
      char* ch;
      ch=getColor(1,tab); /*affiche la couleur d'indice 1*/
      printf("%s",ch);
      }

  6. #6
    Expert confirmé
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Par défaut
    Citation Envoyé par zchallal
    bonjour,
    je ne sais pas si j'ai bien compris votre problème.
    ce que je vous propose permet de remplir une table avec des couleur puis réaliser la fonction getColor qui permet de donner la couleur d'indice i de la table précedente:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    #include<stdio.h>
     char* getColor(int i, char* tab[7])
      { return(tab[i]);
      }
     main()
     {char* tab[7];
      tab[0]="rouge";
      tab[1]="vert";
      tab[2]="bleu";
      /*continuer le remplissage de la table*/
      char* ch;
      ch=getColor(1,tab); /*affiche la couleur d'indice 1*/
      printf("%s",ch);
      }

    Désolé de dire ca mais ton code est competement faux.

    tab[0] = "rouge" ce n'est pas comme ca qu'on initialise des chaines de caracteres mais avec str(n)cpy, de plus tu n'a pas alloué de memoire pour tes chaines de caracteres (malloc).
    Ensuite ta fonction getColor est completement inutile autant faire directement
    printf("%s\n", tab[1]);

    Ensuite main retourne toujours int.

  7. #7
    Membre éclairé Avatar de Biosox
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    298
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 298
    Par défaut
    Citation Envoyé par Skyrunner
    de plus tu n'a pas alloué de memoire pour tes chaines de caracteres (malloc).
    ça m'a aussi semblé curieux, mais ça marche.
    En fait le seul problème de compilation c'est la déclaration de "char* ch" qui est faite au mauvais endroit.

    En fait je crois (à confirmer) que les chaines de caractères codées en dur (entre guillements) dans le code sont placée à la fin du binaire, et lors des commandes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    tab[0]="rouge";
      tab[1]="vert";
      tab[2]="bleu";
    c'est les pointeurs vers ces chaînes qui sont utilisés, donc c'est correct.

    Mais la je m'aventure un peu sur un terrain que je maitrise mal, donc je peux me tromper.
    toujour est-il que le code marche (si on remet le "char* ch" à la bonne place) et que si on observe le .exe dans un editeur, on retrouve bien les chaînes "vert", "rouge", etc...

  8. #8
    Expert confirmé

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Par défaut
    Citation Envoyé par Biosox
    En fait je crois (à confirmer) que les chaines de caractères codées en dur (entre guillements) dans le code sont placées
    Quelque part dans le binaire oui, pas forcément à la fin...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    tab[0]="rouge";
      tab[1]="vert";
      tab[2]="bleu";
    c'est les pointeurs vers ces chaînes qui sont utilisés, donc c'est correct.
    La zone pointée peut ou pas être sous forme écriture seule donc cela veut dire qu'il ne faut pas les modifier si on veut rester portable...

    D'où le fait que mettre const peut être une bonne protection!

    Jc

  9. #9
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par Biosox
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    char * tableau[7] = {
    "rouge",
    "bleu",
    "vert",
    "orange",
    "jaune",
    "rose"
    "mauve"
    };
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    static char const * tableau[] = 
    {
       "rouge",
       "orange",
       "jaune",
       "vert",
       "bleu",
       "indigo"
       "violet",
    };

  10. #10
    Membre Expert
    Avatar de Gruik
    Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    1 566
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 566
    Par défaut
    Tu mets le const apres le char, c'est une preference personnelle ou c'est pour faire le rebelle?

  11. #11
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par Gruik
    Tu mets le const apres le char, c'est une preference personnelle ou c'est pour faire le rebelle?
    Préférence personnelle.

    T qual ou qual T, ça n'a aucune importance.

  12. #12
    Membre averti
    Inscrit en
    Mai 2006
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 53
    Par défaut
    il faut être sûre avant de juger. mon code a été compilé puis executé avant de le présenter. en plus je ne sais pas où est ce que tu a apris que pour déclaré une chaine il faut lui allouer d'abord de l'espace. ta solution est trop complexe pour un si simple besoin.tu peut initialiser le tableau avec des pointeur vers des chaine.gain 'espace et simplicité de programmation.

    Citation Envoyé par Skyrunner
    Désolé de dire ca mais ton code est competement faux.

    tab[0] = "rouge" ce n'est pas comme ca qu'on initialise des chaines de caracteres mais avec str(n)cpy, de plus tu n'a pas alloué de memoire pour tes chaines de caracteres (malloc).
    Ensuite ta fonction getColor est completement inutile autant faire directement
    printf("%s\n", tab[1]);

    Ensuite main retourne toujours int.

  13. #13
    Membre averti
    Inscrit en
    Mai 2006
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 53
    Par défaut
    Citation Envoyé par Biosox
    ça m'a aussi semblé curieux, mais ça marche.
    En fait le seul problème de compilation c'est la déclaration de "char* ch" qui est faite au mauvais endroit.

    En fait je crois (à confirmer) que les chaines de caractères codées en dur (entre guillements) dans le code sont placée à la fin du binaire, et lors des commandes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    tab[0]="rouge";
      tab[1]="vert";
      tab[2]="bleu";
    c'est les pointeurs vers ces chaînes qui sont utilisés, donc c'est correct.

    Mais la je m'aventure un peu sur un terrain que je maitrise mal, donc je peux me tromper.
    toujour est-il que le code marche (si on remet le "char* ch" à la bonne place) et que si on observe le .exe dans un editeur, on retrouve bien les chaînes "vert", "rouge", etc...
    le code est totalement correcte même la déclaration char* ch. en fait tab est un tableau de pointeur vers des chaines et non un tableau de chaine.

  14. #14
    Membre averti
    Inscrit en
    Avril 2006
    Messages
    18
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Avril 2006
    Messages : 18
    Par défaut
    Merci beaucoup de votre aide à tous.

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

Discussions similaires

  1. decalage à gauche sur une tres grand tableau de char
    Par petitours dans le forum C++Builder
    Réponses: 10
    Dernier message: 14/07/2005, 22h40
  2. retrouver unesuite de caractères dans un tableau de char
    Par petitours dans le forum C++Builder
    Réponses: 17
    Dernier message: 12/07/2005, 23h43
  3. Ansistring et tableau de char
    Par rabbi_jaccob dans le forum C++Builder
    Réponses: 2
    Dernier message: 24/12/2004, 11h51
  4. Adresse d'un tableau de char
    Par Trap D dans le forum C
    Réponses: 8
    Dernier message: 23/12/2003, 12h02
  5. Réponses: 4
    Dernier message: 10/10/2003, 18h04

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