访问C中零长度数组地址时的编译错误

时间:2012-11-21 09:50:23

标签: c

  

可能重复:
  zero length arrays vs. pointers

一些新的编译器会针对以下情况抛出编译错误

struct test {
int length;
char data[0];
};

int main(void)
{
char string[20] = {0};
struct test *t;

//Some code

memcpy(string, t->data, 19); //Compilation error 
}

然而,如果我这样做,这会得到解决。

memcpy(string, &(t->data[0]), 19);

为什么有些新编译器会强制执行此限制?

修改错误

2 个答案:

答案 0 :(得分:6)

这有什么问题:

struct test t;

memcpy(string, test->data, 19);

?提示,test类型

编辑:关于真正的答案,请看这个问题:zero length arrays vs. pointers(或关于SO的类似问题)

答案 1 :(得分:0)

数组的大小不能为0

这是标准:

ISO 9899:2011 6.7.6.2:

   If the expression is a constant expression, it shall have a value
   greater than zero

第二次

使用它:

memcpy(string,t->data,19); instead of what you have used.