Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

tableau souple

15 réponses
Avatar
PIGUET Bruno
Bonjour,

Pour créer, puis parcourir, un tableau constant (au sens du langage C),
mais pouvant évoluer (au fil des différentes versions), sans m'embêter
avec des #define NB_VAL ou autre, j'utilise un idiome basé sur sizeof
(tab) / sizeof (*tab) (voir l'ECM en PS).

Les avisés lecteurs de ce newsgroup ont-il un avis sur cette
technique ? Y-a-t'il un danger caché ? Avez-vous autre chose à
recommander ?.

Merci d'avance,

Bruno.

PS : voici l'ECM :

#include<stdio.h>

int
main ()
{
char *villes[] = { "Paris", "Lyon", "Toulouse" };
int i;

for (i = 0; i < sizeof (villes) / sizeof (*villes); i++)
{
printf ("%d : %s\n", i, villes[i]);
}
return 0;
}

5 réponses

1 2
Avatar
Samuel DEVULDER
zwim a écrit :

La valeur terminale dépendra des données, par exemple -1 pour un
tableau de nbr positifs, NULL, "", ou tout autre valeur qu'on puisse
différentier des valeurs potentiellement utilisees.



Oui, l'usage d'une sentinelle pour indiquer la fin de tableau est un
truc assez pratique, surtout si on joue avec des pointeurs à la place
des tableaux. C'est simple, propre efficace.

Tiens, je me demande si le fait qu'on ait argv[argc] == NULL dans main()
ne tiendrait pas de cette idée de sentinelle (mais je sais pas si
c'est général ou juste le fait que execve() impose cette convention).

sam.
Avatar
Jean-Marc Bourguet
Samuel DEVULDER writes:

Tiens, je me demande si le fait qu'on ait argv[argc] == NULL dans main() ne
tiendrait pas de cette idée de sentinelle (mais je sais pas si c'est
général



C'est demande par C90.

A+

--
Jean-Marc
FAQ de fclc: http://www.levenez.com/lang/c/faq
Site de usenet-fr: http://www.usenet-fr.news.eu.org
Avatar
Jean-Christophe
On Apr 14, 9:40 am, PIGUET Bruno

Pour créer, puis parcourir, un tableau constant (au sens du langage C),
mais pouvant évoluer (au fil des différentes versions), sans m'embê ter
avec des #define NB_VAL ou autre, j'utilise un
idiome basé sur sizeof(tab) / sizeof (*tab)  



Dans ces cas j'utilise parfois un terminateur (0 ou NULL)
dans la liste des pointeurs pour détecter la fin de la liste.

#include<stdio.h>
int main(void)
{
char *villes[] = { "Paris", "Lyon", "Toulouse", 0 };
int i;
for( i=0; villes[i]; i++ )
printf ("%d : %sn", i, villes[i]);
return 0;
}
Avatar
zwim
Le Mon, 19 Apr 2010 05:29:56 -0700 (PDT)
Jean-Christophe a écrit
On Apr 14, 9:40 am, PIGUET Bruno

Pour créer, puis parcourir, un tableau constant (au sens du langage C),
mais pouvant évoluer (au fil des différentes versions), sans m'embêter
avec des #define NB_VAL ou autre, j'utilise un
idiome basé sur sizeof(tab) / sizeof (*tab)  



Dans ces cas j'utilise parfois un terminateur (0 ou NULL)
dans la liste des pointeurs pour détecter la fin de la liste.

#include<stdio.h>
int main(void)
{
char *villes[] = { "Paris", "Lyon", "Toulouse", 0 };
int i;
for( i=0; villes[i]; i++ )
printf ("%d : %sn", i, villes[i]);
return 0;
}



C'est-y pas ce que j'ai écrit ?!


--
zwim.
Rien n'est impossible que la mesure de la volonté humaine...
Avatar
Jean-Christophe
On Apr 20, 9:33 pm, zwim

C'est-y pas ce que j'ai écrit ?!



Si, c'est-y, j'avions pas vu ton post-it, désolé !
1 2