si tu fais &tab c''est une reference a un tableau de 4 pointeurs, donc il faut que la fonction ait un prototype :
msg_intercept(char * msg, char * del , char *tab[4])
ce qui est penible
Plus que la pénibilité, c'est la sécurité du code qui est en jeu: à moins que je ne me trompe lourdement, tu peux bien passer un tableau de n'importe quelle taille à ta fonction, il n'y a pas de contrôle (imposé par la norme, s'entend). D'où des problèmes si tu veux accéder à tab[3] alors que tu lui as passé un tableau de taille 2, ou si tu lui as passé un tableau de taille 6... (mais peut-être je me trompe; j'ai peut-être confondu avec les cas void f(char *str) et void f(char str[4])).
Donc la fonction peut etre :
msg_intercept(char * msg, char * del , char **tab, int nb)
Ou, en C99: msg_intercept(char * msg, char * del , int nb, char *tab[nb])
Mais c'est une fonctionnalité (les tableaux de taille variable, ou VLA) qui est "broken" dans gcc...
sizeof (tab ) = 16 dans main() car c'est un tableau de 4 pointeurs
Non: sizeof tab == 4 * sizeof(*char). Il y a des architectures où les deux coïncident, mais c'est loin d'être universel...
sizeof (tab) =4 dans msg_intercept car c'est un pointeur.
[^] # Re: il faut passer le tableau en reference
Posté par alf . En réponse au message Extraction sous-chaînes. Évalué à 1.
Plus que la pénibilité, c'est la sécurité du code qui est en jeu: à moins que je ne me trompe lourdement, tu peux bien passer un tableau de n'importe quelle taille à ta fonction, il n'y a pas de contrôle (imposé par la norme, s'entend). D'où des problèmes si tu veux accéder à tab[3] alors que tu lui as passé un tableau de taille 2, ou si tu lui as passé un tableau de taille 6... (mais peut-être je me trompe; j'ai peut-être confondu avec les cas void f(char *str) et void f(char str[4])).
Ou, en C99:
msg_intercept(char * msg, char * del , int nb, char *tab[nb])
Mais c'est une fonctionnalité (les tableaux de taille variable, ou VLA) qui est "broken" dans gcc...
Non: sizeof tab == 4 * sizeof(*char). Il y a des architectures où les deux coïncident, mais c'est loin d'être universel...
Idem: sizeof tab == sizeof(**char)