2

重複の可能性:
長さゼロの配列とポインター

一部の新しいコンパイラは、以下の場合にコンパイル エラーをスローします

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);

一部の新しいコンパイラがこの制限を強制している理由は何ですか?

間違いを修正するために編集されました

4

2 に答える 2

6

これの何が問題なのですか:

struct test t;

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

? ヒントtesttypeです。

編集: 本当の答えについては、この質問を参照してください:長さゼロの配列とポインター(または SO に関する同様の質問)

于 2012-11-21T09:54:59.973 に答える
0

0配列にsizeを指定することはできません。

標準は次のとおりです。

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.
于 2012-11-21T10:01:58.820 に答える