Taille char** en C

Fermé
nounou_89 Messages postés 44 Date d'inscription jeudi 4 mars 2010 Statut Membre Dernière intervention 20 mars 2014 - 3 mai 2011 à 14:50
nounou_89 Messages postés 44 Date d'inscription jeudi 4 mars 2010 Statut Membre Dernière intervention 20 mars 2014 - 9 mai 2011 à 16:01
Bonjour,

J'ai une tableau de type char** p =...
et je souhaiterai recupere la taille du tableau j'ai essayé de faire comme sa mais sa marche pas

int taille_tableau(char** tab){
int i=0;
char* mot;
if(tab != NULL){
while((mot=tab[i]) != NULL){
i++;
}
return i;
}
return 0;
}

merci d'avance

1 réponse

Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
3 mai 2011 à 14:58
bonjour,
tab est un pointeur de pointeur de char, ce n'est pas un tableau, il est impossible de connaitre sa taille.
0
nounou_89 Messages postés 44 Date d'inscription jeudi 4 mars 2010 Statut Membre Dernière intervention 20 mars 2014 12
3 mai 2011 à 15:30
et si j'ai comme
char *pays[7] = {"Maroc","Mauritanie","Marseille","Martinique","France","Marcel","Portugal"};

ceci est un exemple mais en faite je cherche le 7 que je suis suposé ne pas connaitre
0
Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
3 mai 2011 à 16:28
dans ce cas là, pays est un tableaux de pointeur, tu peux connaitre sa taille grâce à l'opérateur "sizeof".
Le problème, c'est qu'une foi passer en paramètre de la fonction on ne peut plus connaitre la taille de "pays". Sauf peut être (à vérifier, mais je n'y crois pas) si tu lui spécifie que tu passe réellement un tableau :
int taille_tableau(char* tab[]){
ou alors tu ajoute une taille à ton tableau pour faire le test comme tu veux. :
char *pays[8] = {"Maroc","Mauritanie","Marseille","Martinique","France","Marcel","Portugal",0};
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
3 mai 2011 à 21:25
Sauf peut être (à vérifier, mais je n'y crois pas) si tu lui spécifie que tu passe réellement un tableau :

Je confirme. Ca enverra bien un pointeur. En C, on ne peut passer de tableaux en paramètre.
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
3 mai 2011 à 21:29
Si tu as char *pays[]={"...", ...};
Tu peux déterminer le nombre d'éléments via : sizeof pays/sizeof *pays;
Mais tu ne pourras pas envoyer le tableau en paramètre de fonction, tu n'enverras qu'un pointeur dessus. Deux solutions : comme te propose Char Snipeur, tu ajoutes une valeur nulle en fin de tableau. Mais en général en C, on envoie tout simplement la taille en paramètre également.
int taille_tableau(char** tab, const size_t sz)
Et pour appeler la fonction : taille_tableau(tab, sizeof tab/sizeof *tab);

Cdlt,
0
nounou_89 Messages postés 44 Date d'inscription jeudi 4 mars 2010 Statut Membre Dernière intervention 20 mars 2014 12
9 mai 2011 à 16:01
Merci a vous tous cela bien aidé :)
0