Ximoon (./2) :
Un tableau d'octet est (presque) un pointeur sur char, donc ton &message est un superpointeur (
) sur char (un char** quoi).
Non, ce n'est pas un
char **. C'est encore un animal différent, un
char (*)[256]. Alors qu'assigner un
char ** à un
char * est une erreur fatale (ça va passer avec un warning aussi, mais boguer grave en temps d'exécution), ici le warning est le seul problème, parce qu'un
char (*)[256] n'est pas si différent que ça d'un
char *. (Ceci dit, le warning est raison suffisante pour corriger le problème.)
L'adresse contenue dans un
char ** est l'adresse d'un pointeur (de type
char *). L'adresse contenue dans un
char (*)[256] est l'adresse du premier
char du tableau de 256
chars.
Cette différence est importante quand on veut faire un tableau à plusieurs dimensions: un
char ** revient à la représentation style Java (tableau de pointeurs), un
char (*)[n] à une représentation contiguë en mémoire (donc plus efficace, une seule allocation à faire).
Le pointeur obtenu par le decay (conversion automatique tableau->pointeur sous certains contextes, c'est ça qui permet d'utiliser le
char [256] directement comme un
char * sans aucune conversion) d'un
char *(x[m]) est un
char **px. Le pointeur obtenu par le decay d'un
char y[m][n] est un
char (*py)[n].