伸缩性数组成员(Flexible Array Member),又名柔性数组成员或者弹性数组成员。 # 注意事项 定义必须遵照以下规定: **伸缩性数组成员必须是结构体最后一个成员变量**,否则伸缩性数组成员的内存空间会覆盖结构体其它成员变量。 # 测试用例 以下是违反上述“规定”的测试用例: ```c #include #include #include #define FLEXIBLE_ARRAY_MEMBER 0 typedef struct { int a; char data[FLEXIBLE_ARRAY_MEMBER]; } st_1; typedef struct { st_1 c; // 空间覆盖了其它成员变量 int b; } st_2; int main(int argc, char **argv) { st_2 *s2 = malloc(sizeof(st_2) + sizeof(char) * 8); s2->b = 100; memset(s2->c.data, 0, sizeof(char) * 8); printf("%d\n", s2->b); return 0; } ``` 以上测试用例输出结果为0,而不是100。 ```bash [yz@bogon flex_ary]$ gcc -g -o test test.c [yz@bogon flex_ary]$ ./test 0 ```