Taille tableau

cs_MiTcH37 Messages postés 203 Date d'inscription dimanche 6 avril 2003 Statut Membre Dernière intervention 13 août 2005 - 9 nov. 2003 à 11:48
cs_jansen Messages postés 10 Date d'inscription jeudi 15 juillet 2004 Statut Membre Dernière intervention 4 décembre 2004 - 4 déc. 2004 à 15:50
J'aimerai savoir comment connaitre la taile d'un tableau, pour ne pas les envoyer comme argument dans une fonction.
ex : void fct(int trier[], int taille);
si qqun sait l'equivalence de strlen() pour les tableaux ?
@++

%-6 MiTcH - [mailto:m.i.t.c.h@free.fr e-mail] - :approve)

6 réponses

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
9 nov. 2003 à 11:55
strlen NE PEUT PAS avoir d'equivalent pour tableau !!!
Ta func:
void fct(int trier[], int taille);
trier est un pointeur sur 1er octet du tableau.
taille DOIT etre le nombre d'elements du tableau a trier si tu connais le type d'element(int, double....).
BruNews, ciao...
0
garslouche Messages postés 583 Date d'inscription mardi 26 novembre 2002 Statut Membre Dernière intervention 29 mai 2015 1
10 nov. 2003 à 07:54
En fait il y a une autre solution.
C'est d'ailleurs celle utilisée par strlen.

Les chaines de caractères en C se terminent toujours (ou presque) par le caractère nul : '\0'
Par exemple:
La chaine de caractère "salut" est stockée comme
S | A | L | U | T | \0

C'est pour ça qu'il faut donner un caractère de plus dans une déclaration de chaine. C'est à dire que la chaine "salut" est un char[6] (au moins).

Du coup strlen n'a qu'à chercher le caractère \0 pour déterminer la longueur de la chaine.

Sur le même principe si tu utilises une liste dont le dernier élément est NULL tu peux en déterminer le nombre d'élément.
0
garslouche Messages postés 583 Date d'inscription mardi 26 novembre 2002 Statut Membre Dernière intervention 29 mai 2015 1
10 nov. 2003 à 08:01
Euh...je pense à un truc...il faut qd même faire attention. Parceque selon les compilateurs NULL peut être interprété comme le nombre 0 (c'est le cas avec VC++) du coup un tableau d'entiers contenant un 0 aurait une longueur réduite...

Sur le principe ça ne change rien : il suffit de remplacer NULL par une valeur qui ne peut pas t'arriver normalement. Par exemple si tu utilises des entiers positifs uniquement tu peux utiliser -1 comme élément de fin de liste. Cet élément est à chercher selon le cas dans lequel tu te trouves.

Voilou
0
cs_MiTcH37 Messages postés 203 Date d'inscription dimanche 6 avril 2003 Statut Membre Dernière intervention 13 août 2005
11 nov. 2003 à 10:38
Merci pour vos réflexions, mais j'y avais déjà penser ! :)
le pb c que je ne peux prendre une valeur et que le \0 ou NULL ne marche pas quand ya un 0 dans le tableau...
@++

%-6 MiTcH - [mailto:m.i.t.c.h@free.fr e-mail] - :approve)
0

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

Posez votre question
garslouche Messages postés 583 Date d'inscription mardi 26 novembre 2002 Statut Membre Dernière intervention 29 mai 2015 1
11 nov. 2003 à 11:17
Bah il y a encore une autre solution : utiliser le plus grand entier : 2^31 - 1, c'est-à-dire 2147483647

De toutes façons en 32 bits signés tu n'iras pas au-delà. Ca peut servir de code de fin de liste.
0
cs_jansen Messages postés 10 Date d'inscription jeudi 15 juillet 2004 Statut Membre Dernière intervention 4 décembre 2004
4 déc. 2004 à 15:50
Salut,

ce que tu peux faire c'est quelque chose comme cela (marche pour du 1 dimension, deux, je ne sais pas trop)

int nt;
nt=(sizeof(tab)/sizeof(tab[0]));

POUR LES ENTIERS: Comme ca tu récupères la taille de ton tableau en octet et tu la divise par la taille d'une case et tu obtiens la longueur de ton tableau.

(de tête, je ne dois pas me tromper)

Dur dur d'être un débutant... il faut lutter c looonnnngg...
0
Rejoignez-nous