零长度和变量长度数组GNU C 允许使用零长度数组,在定义变长对象的头结构时,这个特性在一些数据进行网络通信时非常有用。 但是零长度的数组编译环境不同会出问题,所以用下面的格式。
typedef struct package{
int m;
char ch[];
}PDU;
并没有为 data[] 数组分配内存,因此 ,sizeof(PDU)=sizeof(int)值为4
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct package{
int m;
char ch[];
}PDU;
int main()
{
/*打印结构体的大小 发现打印是4*/
printf("%d\n",sizeof(PDU));
char *a="hulaquan";
PDU *p = (PDU*)malloc(sizeof(PDU)+strlen(a));
sprintf(p->ch,"%s",a);
return 0;
}