长度为0的数组的作用,纯c
#include struct Test { int len; char data[0]; }; int main() { char str[] = "abc"; Test* t = (Test*)malloc(sizeof(struct Test) + sizeof(str)); t->len = sizeof(str); memcpy(t->data, str, sizeof(str)); printf("len: %d\n", t->len); printf("data: %s\n", t->data); free(t); }
- 很方便的保存带有不定长度的数据,譬如:网络的数据,图片,视频的数据
- 这个功能只是在gnu的扩展中,在vs中编译时有warnning的。
- 一般纯c中使用这个功能比较方便。
- 在vs中有告警为: warning C4200: 使用了非标准扩展: 结构/联合中的零大小数组,当 UDT 包含大小为零的数组时,无法生成复制构造函数或副本赋值运算符。在清楚这些告警的情况下,可以使用如下的方法去除这个告警