我发现在gcc 6.1.0中编译但在gcc中没有编译的代码中出现“错误:赋值给数组类型的表达式”错误4.4.6。在使用va_arg()解析参数时发现错误gdb-6.1.0
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");
}
我该如何解决这个错误?在gcc 4.4.6中,编译顺利进行。由于某些原因,我只需要使用gcc 6.1.0编译器。
我尝试过strcpy(ad,va_arg(ap,mac_t));.它不会给我任何编译器错误。但它没有达到目的。我的意思是,参数不会被复制到数组广告。我在打印广告内容时看到无效数据。 –
传递给函数时,数组衰减为指针类型。 gcc 6.1.0正确,你不能分配给一个数组。 – jxh
@jxh正是。 strcpy()在指针上不起作用。任何其他方式来解析gcc 6.1.0中的参数? –