GNU C中的零长度数组

来源:互联网 发布:什么是单例模式 java 编辑:程序博客网 时间:2024/04/25 10:01

GNU C对标准C进行了一系列的扩充,其中零长度数据就是GNU C所特有的

如下结构体:

typedef struct _data_struct

{

int length;

char data[0]; 

}data_struct;

就是一个零长度数组,这个结构体并没有为数组data分配空间,此结构体的大小sizeof(data_struct)==sizeof(length)。

我们在使用时可以根据需要创建数组的大小:

int my_data_length = 10;

data_struct  *datap = (data_struct *)malloc(sizeof(data_struct) + sizeof(char)*my_data_length);

datap->length = my_data_length;

for(int i = 0; i < datap.length; i++)

{

strcpy(datap.data[i], i);

.......

}

free(datap);

好处是可以动态的申请数组的大小,这在网络编程中会有用到,先记下来



原创粉丝点击