Passer un tableau de pointeurs en parametres

achirane Messages postés 3 Date d'inscription mardi 17 février 2004 Statut Membre Dernière intervention 18 février 2004 - 17 févr. 2004 à 12:42
cs_pheno Messages postés 141 Date d'inscription mardi 30 avril 2002 Statut Membre Dernière intervention 23 mars 2005 - 19 févr. 2004 à 08:24
bonjour,
je debute en C (dur..) et j'ai un pb qui va surement vous faire ricaner ;-) :
je voudrais passer un tableau de pointeurs en parametre a ma fonction et j'y arrive pas...

#include <stdio.h>

void Fonction(char *Tab, char *Valeur);

int main(void)
{
char *Tab[10];   // mon tableau de pointeurs

char Valeur[] = "mavaleur";

Fonction(Tab, Valeur);
}

void Fonction(char *Tab, char *Valeur)
{
int i;

for (i = 0; i < 10; i++){
Tab[i] = Valeur;
}

printf("%p : \n", Tab);

for (i = 0; i < 10; i++){
printf("%p\n", Tab[i]);
}

}


ben voila mes questions : pourquoi ca marche pas ?... comment faire pour que ca marche ?

Merci d'avance

6 réponses

cs_pheno Messages postés 141 Date d'inscription mardi 30 avril 2002 Statut Membre Dernière intervention 23 mars 2005 1
17 févr. 2004 à 13:08
char *Tab[10];
est equivalent à char **tab;

essaye ca

#include <stdio.h>
#include <string.h>//pour strcpy()
void Fonction(char *Tab, char *Valeur);

int main(void)
{
char Tab[10]; // mon tableau de pointeurs

char Valeur[] = "mavaleur";

Fonction(Tab, Valeur);
}

void Fonction(char *Tab, char *Valeur)
{
int i;

for (i = 0; i < 10; i++){
//Tab[i] = Valeur;// PB
Tab[i] = Valeur[i]; ou *(Tab+i)=*(valeur+i);
}
// ou tu remplaces tout le for
// par ou strcpy(tab,valeur);

printf("%p : \n", Tab);

for (i = 0; i < 10; i++){
printf("%p\n", Tab[i]);
}

Chevalier Pheno Starboard, membre de la Freeman-Corp
0
achirane Messages postés 3 Date d'inscription mardi 17 février 2004 Statut Membre Dernière intervention 18 février 2004
17 févr. 2004 à 14:04
tout d'abord merci de ta reponse,
en fait en relisant mon post je vois que je n'ai pas été tres clair.

en fait tab est un tableau qui doit accueillir 10 pointeurs (ici ils doivent tous pointer vers Valeur, c bete mais c pour l'exemple)

mon probleme est que je n'arrive pas a passer en parametre mon tableau Tab.

Pour etre plus clair, ca ca marche:
#include <stdio.h>

int main(void)
{
char *Tab[10];

char Valeur[] = "mavaleur";

int i;

for (i = 0; i < 10; i++){
Tab[i] = Valeur;
}

printf("%p : \n", Tab);

for (i = 0; i < 10; i++){
printf("%p\n", Tab[i]);
}

}


sortie :

0xbffffa20 :
0xbffffa14
0xbffffa14
0xbffffa14
0xbffffa14
0xbffffa14
0xbffffa14
0xbffffa14
0xbffffa14
0xbffffa14
0xbffffa14

mais je voudrais le faire en passant par une fonction (1er post)
0
ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 7
17 févr. 2004 à 19:32
void Fonction(char** Tab, char *Valeur);

ou

void Fonction(char* Tab[], char *Valeur);
0
cs_pheno Messages postés 141 Date d'inscription mardi 30 avril 2002 Statut Membre Dernière intervention 23 mars 2005 1
18 févr. 2004 à 08:20
Salut
char *Tab[10];
c est un char **
donc dans l entete de ta fonction tu dois recuperer un char **
comme te l a mis ymca2003, dans le post ci dessus.
@++

Chevalier Pheno Starboard, membre de la Freeman-Corp
0

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

Posez votre question
achirane Messages postés 3 Date d'inscription mardi 17 février 2004 Statut Membre Dernière intervention 18 février 2004
18 févr. 2004 à 12:08
merci pour ces explications, je comprends beaucoup mieux.

juste une derniere chose, y a t'il une difference entre
void Fonction(char** Tab, char *Valeur);
et
void Fonction(char **Tab, char *Valeur);

ou entre

void Fonction(char* Tab[], char *Valeur);
et
void Fonction(char *Tab[], char *Valeur);

j'ai deja remarque ces 2 notations mais je n'ai pas trouve d'explication...

En tous cas un grand merci a vous :-)
0
cs_pheno Messages postés 141 Date d'inscription mardi 30 avril 2002 Statut Membre Dernière intervention 23 mars 2005 1
19 févr. 2004 à 08:24
non il n y a pas de difference.
Voila @++

Chevalier Pheno Starboard, membre de la Freeman-Corp
0
Rejoignez-nous