操作方法
1)方法1 struct header { size_t len; unsigned char data[1]; }; ptr = malloc(sizeof(struct header) + (n -1)); 但这种方法是否有效是有赖于实现的,这破坏了可移植性的规则.
2)方法2 struct header*my_header = malloc(offsetof(struct header, data) + n * sizeof(my_header->data)); 或者使用宏来简化代码: #define FLEXIBLE_SIZE SIZE_MAX // or whatever maximum length for an array #defineSIZEOF_FLEXIBLE(type, member, length) \ (offsetof(type,member) + (length) * sizeof((type*)0)->member[0]) 这种方法过于复杂,而且为了保持C89兼容,看起来没有什么特别的好处,你不需要一个完全的C99编译器就可以使用弹性数组成员.
3)方法3 使用指针,不要节约那一次间接引用,如果可移植性那么重要的话.