Je trouve une erreur indiquant "erreur: affectation à une expression avec type tableau" pour mon morceau de code suivant compilé dans gcc 6.1.0 mais pas dans gcc 4.4.6.Erreur trouvée uniquement dans gcc-6.1.0 lors de l'analyse des arguments à l'aide de va_arg()
void foo(char *fmt, ...)
{
va_list ap;
int d;
char *c, *s;
typedef unsigned char mac_t[6];
mac_t ad;
va_start(ap, fmt);
while (*fmt)
switch (*fmt++) {
case 's':
s = va_arg(ap, char *);
printf("string %s\n", s);
break;
case 'd': /* int */
d = va_arg(ap, int);
printf("int %d\n", d);
break;
case 'c': /* char */
ad = va_arg(ap, mac_t); //**** error here only on gcc 6.1.0 compiler
printf("With unsigned char: char %c.%c.%c.%c.%c.%c\n", ad[0],ad[1],ad[2],ad[3],ad[4],ad[5]);
}
va_end(ap);
}
int main()
{
foo("%c", "AABBCC");
}
Comment puis-je résoudre cette erreur? En gcc 4.4.6, la compilation passe bien. Pour certaines raisons, je dois utiliser le compilateur gcc 6.1.0 uniquement.
J'ai essayé strcpy (ad, va_arg (ap, mac_t)) ;. Cela ne me donne aucune erreur de compilateur. Mais cela ne sert pas le but. Je veux dire, les arguments ne sont pas copiés dans la publicité du tableau. Je vois des données invalides lorsque j'imprime le contenu de l'annonce. –
Les tableaux se désintègrent en un type de pointeur lorsqu'ils sont transmis à une fonction. gcc 6.1.0 le fait bien, vous ne pouvez pas l'assigner à un tableau. – jxh
@jxh Exactement. strcpy() ne fonctionne pas sur les pointeurs. Toute autre façon d'analyser les arguments dans gcc 6.1.0? –