• [^] # Re: il faut passer le tableau en reference

    Posté par . En réponse au message Extraction sous-chaînes. Évalué à 1.

    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.
    Idem: sizeof tab == sizeof(**char)