[pointeur sur un tableau de pointeur]

Bonjour,

voila, j'aimerai que ma fonction retourne un pointeur sur un tableau de pointeur.
mais je ne m'en sors pas :

char *mafonction(FILE *f)
{

}

8 réponses

  1. uops désolé, un raccourci malencontreux a posté le message ...

    voici donc ma fonction :

    char *mafonction(FILE *f)
    {
    char *tab[1];
    char *com,*seq;
    char *res;

    instruction.......

    tab[0] = p1;
    tab[1] = p2;
    *res = tab
    return res;
    }

    voila. mais ca ne marche pas, et la, je tourne en rond en jouant avec les pointeurs et leurs adresses...arghh

    si vous avez une idée, je suis preneur |-)

    merci d'avance
    0
    1. oups, j'avais laisser quelques erreurs...désolé...
      (on ne peut pas editer un message sur ce forum??)

      char *mafonction(FILE *f)
      {
      char *tab[1];
      char *com,*seq;
      char *res;

      instruction.......

      tab[0] = com;
      tab[1] = seq;
      *res = tab;
      return res;
      }
      0
      1. Hello,

        Je pense que ton char *tab[1] est un pointeur vers un pointeur d'un tableau de pointeur (sympa!).
        Solution : déclare le comme char tab[2].

        Remarque, pour mettre 2 éléments dans tab, il faut le déclarer tab[2].
        0
        1. si je fais

          char tab[2]; /* declaration */
          .....
          .....

          tab[0] = com;
          tab[1] = seq;
          *res = tab;

          ca me renvoie 3 warnings (un par ligne d'assignement... : "assignements makes integer from pointer without a cast"
          0
          1. Oups, je t'ai dit des bétises,

            Pour un tableau de pointeur il faut bien utiliser char * tab[2] qui en fait est un char **.

            Tu dois donc déclarer char ** res.

            Voilà le code :

            #include <iostream.h>

            int main()
            {
            char * tab[2];
            char comm[20] = "Hello";
            char seq[20] = "A+";

            char ** res;

            tab[0] = comm;
            tab[1] = seq;

            res = tab;

            cout << "Addr in Res = " << res << endl;
            cout << "Addr tab = " << tab << endl;
            }
            0
            1. bonjour,

              au sujet de ton code:

              #include <iostream.h>
              deprecie, preferer:
              #include <iostream>

              [...]

              cout << "Addr in Res = " << res << endl;
              cout << "Addr tab = " << tab << endl;
              c est pas bon meme si ton compilateur l accepte
              faire soit
              using std;
              en debut de fichier, soit
              std::cout .... std::endl...

              et finalemement le monsieur il utilisait des File *, donc il faisait du C, donc des printf etaient de rigueur.

              donc :
              printf("Addr in Res = %s\n", res);
              printf( "Addr tab = %s\n", tab);

              voili voilou,

              --
              pouet
              0
            2. @pouetje ne sais pas pourquoi mon message est apparu ici, mais je voulais repondre a mirza

              --
              pouet
              0
          2. merci pour tes reponses.

            ca compile !!

            sinon, c koi ca ?
            cout << "Addr in Res = " << res << endl;
            cout << "Addr tab = " << tab << endl;

            et si je fais :

            #include <iostream.h>

            char ** mafonction(balabla)
            {
            char * tab[2];
            char comm[20] = "Hello";
            char seq[20] = "A+";

            char ** res;

            tab[0] = comm;
            tab[1] = seq;

            res = tab;
            return res;
            }

            et puis :
            char **toto;
            char *lulu, *lala;
            toto = mafonction(blkabla);

            lulu = toto[0];
            lala = toto[1];

            et bien je n'arrive pas a utiliser lulu et lala....
            0
            1. Je penses que cela doit venir du fait que les variables comm et seq sont locales à la fonction "mafonction", le contenu de leur zone mémoire respectives est donc supprimmé dès que l'on sort de la fonction.
              0
              1. Pitounet a raison essayes ça (en C++)
                De plus res ne sert à rien

                char ** mafonction(balabla)
                {
                char ** tab = new char* [2];
                char* comm = "Hello";
                char* seq = "A+";

                tab[0]=new char[strlen(comm)+1]; // +1 pour le '\0'
                sprintf(tab[0], "%s\0", comm)

                tab[1]=new char[strlen(seq)+1]; // +1 pour le '\0'
                sprintf(tab[1], "%s\0", seq)

                return tab;
                }

                oublies pas le tlibérer TOUT le tableau ensuite ...

                @+,

                mirza
                0
                1. >... essayes ça (en C++)
                  mis a part ca:
                  tab[0]=new char[strlen(comm)+1];
                  ton code c est du C.
                  donc soit tu remplaces par:
                  tab[0] = malloc(strlen(comm) + 1);

                  soit tu tiens vraiment au C++ et tu utilises des std::vector et des std::string, pas des char**, des + au lieu des sprintf, etc...

                  --
                  pouet
                  0