[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

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
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
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
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
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
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
pouet > pouet
 
je ne sais pas pourquoi mon message est apparu ici, mais je voulais repondre a mirza

--
pouet
0
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
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
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
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