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 :

Fonction retournant un tableau de chaines de caractères


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 8
    Par défaut Fonction retournant un tableau de chaines de caractères
    Bonjour,

    j'ai besoin d'être éclairé sur les fonctions retournant un tableau de chaine de caractère. Je m'explique, la fonction en question récupère dans un fichier des chaines de caractères qui sont stockées dans un tableau. Etant donné qu'il est impossible de retourner un tableau, je demande à la fonction de retourner un pointeur sur un tableau de chaines.

    J'utilise la synthaxe suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    char * fonction(...)
    {
    ...
    return (tab);
    }
    pourtant j'ai un problème de compilation de "conversion integer from pointer" avec un " précédente déclaration de fonction était ici ...", j'ai du mal saisir quelque chose !

    Merci d'avance..

  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 : 48
    Localisation : France, Haut Rhin (Alsace)

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

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Salut et bienvenue sur les forums de developpez.com


    Ton code me paraît bien légé pour t'aider Où as-tu vu qu'on ne peut pas retourner un tableau de chaînes ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    char ** retourne_tab (void);
    Par exemple hein Mais ceci ne me paraît pas juste en tous cas:
    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
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 8
    Par défaut
    Je pensais qu'au même titre qu'on a pas le droit de passer en argument un tableau à une fonction, celle ci ne pouvait pas renvoyer un tableau.

    Pour revenir à ma question, si par exemple je prends le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    main()
    {
             char * tab;
             tab = fonction();
    }
     
    char * fonction()
    {
             char * nom[2]={"toto","titi"};
             return (* nom);
    }
    J'avoue que rien que sur l'affectation de tab j'ai un doute :s

    Edit : super merci pour ton lien, c'est exactement ce que je recherchais ! tab représente un pointeur de pointeur sur T non ?

  4. #4
    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 thomass
    Pour revenir à ma question, si par exemple je prends le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    main()
    {
             char * tab;
             tab = fonction();
    }
     
    char * fonction()
    {
             char * nom[2]={"toto","titi"};
             return (* nom);
    }
    J'avoue que rien que sur l'affectation de tab j'ai un doute :s
    ce code est correct[1], mais comprends-tu exactement ce qu'il fait ?

    ------------------------
    [1] mais il serait préférable de le coder
    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
     
    #include <stdio.h>
     
    char const *fonction (size_t n)
    {
       char const *s = NULL;
       char const *nom[] = { "toto", "titi" };
       if (n < sizeof nom / sizeof *nom)
       {
          s = nom[n];
       }
       return s;
    }
     
    int main (void)
    {
       size_t i;
       for (i = 0; i < 3; i++)
       {
          char const *tab = fonction (i);
          if (tab != NULL)
          {
             printf ("tab = '%s'\n", tab);
          }
          else
          {
             printf("index %d : ERREUR\n", i);
          }
       }
       return 0;
    }

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 8
    Par défaut
    Oui j'ai bien saisi, il ne fait rien, c'est un exemple stupide mais c'était uniquement pour illustrer ce sur quoi j'avais un doute !
    Merci de votre aide.

  6. #6
    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 thomass
    Oui j'ai bien saisi, il ne fait rien, c'est un exemple stupide mais c'était uniquement pour illustrer ce sur quoi j'avais un doute !
    Merci de votre aide.
    C'est pas ça ma question. C'est "comprends-tu comment il fonctionne ?" (sous entendu, bien sûr, alors explique ...)

  7. #7
    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 thomass
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    char * fonction(...)
    {
    ...
    return (* tab);
    }
    Si tab est un pointeur sur T, que représente *tab, à ton avis ?

    http://emmanuel-delahaye.developpez....ourner_tableau

Discussions similaires

  1. Réponses: 10
    Dernier message: 31/05/2007, 15h10
  2. [C] tableau de chaines de caractères
    Par kitsune dans le forum C
    Réponses: 18
    Dernier message: 01/04/2006, 18h18
  3. PB avec fonction retournant un tableau
    Par T-B dans le forum Langage
    Réponses: 2
    Dernier message: 27/01/2006, 22h01
  4. fonction retournant un tableau
    Par Jero13 dans le forum C
    Réponses: 7
    Dernier message: 22/11/2005, 11h14

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