[pointeur sur un tableau de pointeur]

guillaume -  
 pouet -
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. guillaume
     
    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
  2. guillaume
     
    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
  3. Pitounet Messages postés 9 Statut Membre
     
    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
  4. guillaume
     
    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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Pitounet Messages postés 9 Statut Membre
     
    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. pouet
       
      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
      1. pouet > pouet
         
        je ne sais pas pourquoi mon message est apparu ici, mais je voulais repondre a mirza

        --
        pouet
        0
  7. guillaume
     
    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
  8. Pitounet Messages postés 9 Statut Membre
     
    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
  9. mirza
     
    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. pouet
       
      >... 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