一些新的编译器会针对以下情况抛出编译错误
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);
为什么有些新编译器会强制执行此限制?
修改错误
答案 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.