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 :

Recuperation d'un tableau de chaine de caratere.


Sujet :

C

  1. #1
    Inactif
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    72
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 72
    Points : 33
    Points
    33
    Par défaut Recuperation d'un tableau de chaine de caratere.
    Bonjour,

    je voudrais savoir comment je doit m'y prendre pour récupérer un char**.
    J'ai penser à utiliser un char *** qui me donnera l'adresse du tableau mais ça me parait trop compliqué
    Est ce que quelqu'un aurait une idée sur la manière de procéder?

    Merci

  2. #2
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Points : 12 462
    Points
    12 462
    Par défaut
    Heu qu'est-ce que tu veut faire au juste, j'ai pas très bien saisie ! Un exemple peut être ?
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  3. #3
    Inactif
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    72
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 72
    Points : 33
    Points
    33
    Par défaut
    Citation Envoyé par CSoldier
    Heu qu'est-ce que tu veut faire au juste, j'ai pas très bien saisie ! Un exemple peut être ?
    Par exemple:
    Si mon tableau est constitué de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    char **tab = {"un,deux","trois",NULL};
    Pour récupérer le tableau,est ce que je dois m'y prendre de cette manière:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    char **recup = (char **)malloc(sizeof(char*)*nb);/*nb indique le nb de case du tableau :4 dans l'exemple*/
    for(i=0;i<nb;i++)
    {
    tab[i] = malloc(strlen(tab[i])+1);
    strcpy(recup[i],tab[i]);
    }
    <...>
    return recup;
    Si ce n'est pas cela ,comment il faut que je fasse?

  4. #4
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Points : 12 462
    Points
    12 462
    Par défaut
    Heu là:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    char **recup = (char **)malloc(sizeof(char*)*nb)
    tu alloues un tableau de tableau, tu récupere rien et de plus, ici:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tab[i] = malloc(strlen(tab[i])+1);
    tu alloues sur un tableau deja initalisé !

    Une petite correction de ton code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    char **recup = malloc (sizeof (*recup) * nb);/*nb indique le nb de case du tableau :4 dans l'exemple*/
     
    for(i=0; i<nb; i++)
    {
       recup[i] = malloc (sizeof (**recup) * strlen (tab[i]) + 1);
       strcpy (recup[i] ,tab[i]);
    }
    <...>
    return recup;
    Là ca pourrais fonctionner !
    Par contre un conseil, verifie le retour de chaque malloc, sait-on jamais !
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  5. #5
    Inactif
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    72
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 72
    Points : 33
    Points
    33
    Par défaut
    Merci de ta réponse.
    Et si j'utilises un char *** recup.
    Est ce qu'il suffit de faire:

  6. #6
    Membre émérite
    Avatar de lakitrid
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    1 535
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 1 535
    Points : 2 388
    Points
    2 388
    Par défaut
    Citation Envoyé par Gryzzly
    Merci de ta réponse.
    Et si j'utilises un char *** recup.
    Est ce qu'il suffit de faire:
    tu veux faire quoi avec ton recup ??

  7. #7
    Inactif
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    72
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 72
    Points : 33
    Points
    33
    Par défaut
    Citation Envoyé par lakitrid
    Citation Envoyé par Gryzzly
    Merci de ta réponse.
    Et si j'utilises un char *** recup.
    Est ce qu'il suffit de faire:
    tu veux faire quoi avec ton recup ??
    Recuperer l'adresse de char**tab et pour ne pas avoir à refaire les allocations.Le tableau tab est alloué correctement

  8. #8
    Membre émérite
    Avatar de lakitrid
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    1 535
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 1 535
    Points : 2 388
    Points
    2 388
    Par défaut
    ne confond pas adresse du tableau (ici tab tout court) et adresse ou est stocké tab (&tab, qui sera ici un char ***)
    Après que veux tu faire sur ce tableau ?
    Normalement quoique tu fasse tu ne devrais pas avoir besoin d'un char *** et tu dois pouvoir t'en sortir juste avec ton char ** (ici tab)

    pour résumer :
    - tab contient l'adresse de ton tableau de tableau de char (type : char **)
    - &tab te donne l'adresse ou est stocker ton double pointeur tab (type : char ***)

  9. #9
    Inactif
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    72
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 72
    Points : 33
    Points
    33
    Par défaut
    Voici le prototype de la fonction dans laquelle je souhaite récupérer un tableau de char**
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int RecupTab(Table *table,char *nom,char **recup)
    Table est une table des symboles.
    Je recherche dans la Table table ,la position de l'élément nom,une fois que j'ai le nom,je voudrais savoir si c'est possible de faire directement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    recup=table->case[position].tab
    sans allouer recup.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    typedef struct
    {
    char *nom;
    char **tab;
    }Symbole
     
    typedef struct
    {
    int taille;
    Symbole case[N];
    }Table;

  10. #10
    Membre émérite
    Avatar de lakitrid
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    1 535
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 1 535
    Points : 2 388
    Points
    2 388
    Par défaut
    oui tu peux

  11. #11
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Points : 12 462
    Points
    12 462
    Par défaut
    Tu peut même présenter ta fonction comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    char ** RecupTab (Table *table, char *nom)
    donc là ta fonction retourne ton tableau, si ca echoue tu peut renvoyer simplement NULL
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par Gryzzly
    Si mon tableau est constitué de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    char **tab = {"un,deux","trois",NULL};
    Je ne vois pas de tableau, mais un simple pointeur.

    Ca peut être :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    char const *tab[] = {"un,deux", "trois", NULL};
    ou ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    char const *tab[] = {"un", "deux", "trois", NULL};
    Pas de Wi-Fi à la maison : CPL

Discussions similaires

  1. sizeof & tableau de chaine de caratere
    Par la_chevre dans le forum Débuter
    Réponses: 13
    Dernier message: 11/09/2008, 11h18
  2. Réponses: 15
    Dernier message: 11/09/2007, 18h36
  3. [Tableaux] recuperation valeurs dun tableau ou d'un array
    Par pascale86 dans le forum Langage
    Réponses: 5
    Dernier message: 11/10/2005, 16h14
  4. [PDE] recuperer le mot ou la chaine selectionnée
    Par khokho dans le forum Eclipse Java
    Réponses: 7
    Dernier message: 13/08/2005, 14h59
  5. recuperer certains temes dans une chaine de caractere
    Par leviathan516 dans le forum ASP
    Réponses: 2
    Dernier message: 15/10/2004, 10h42

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