长度为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);
}
  1. 很方便的保存带有不定长度的数据,譬如:网络的数据,图片,视频的数据
  2. 这个功能只是在gnu的扩展中,在vs中编译时有warnning的。
  3. 一般纯c中使用这个功能比较方便。
  4. 在vs中有告警为: warning C4200: 使用了非标准扩展: 结构/联合中的零大小数组,当 UDT 包含大小为零的数组时,无法生成复制构造函数或副本赋值运算符。在清楚这些告警的情况下,可以使用如下的方法去除这个告警
09-04 19:34