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

nku*_*mar 2 c

可能重复:
零长度数组与指针

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

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 
}
Run Code Online (Sandbox Code Playgroud)

但是,如果我这样做,这会得到解决.

memcpy(string, &(t->data[0]), 19);
Run Code Online (Sandbox Code Playgroud)

某些新编译器执行此限制的原因是什么?

编辑纠正错误

Nim*_*Nim 6

这有什么问题:

struct test t;

memcpy(string, test->data, 19);
Run Code Online (Sandbox Code Playgroud)

?提示,test是一种类型.

编辑:关于真正的答案,请看这个问题:零长度数组与指针(或SO上的类似问题)