C语言中实现变长数组有几种方式:1.柔性数组 2.动态分配内存
1.使用柔性数组的话就是在结构体中定义一个长度为0的数组:
struct MyData { int nLen; char data[0];};数组的长度为0就表明数组占用的长度只有一个数组名,当要使用的时候就可以直接分配制定长度的空间,使用完之后释放即可。
int nLen = 100;MyData *myData = (MyData*)malloc(sizeof(MyData) + 100);
再对这个数组进行其他操作,操作完了之后free掉分配的空间。
2.使用动态分配的方式,和1差不多,只不过要先定义一个指针用来保存分配好的内存空间的其实地址,分配好之后,这个指针就可以当作数组来使用,你要分配多少都是可以变化的,操作完成之后同样要进行释放。
char *p;
p=(char *)malloc(100);
//对p进行操作
free(p);
如果你的变化的长度是来自其他计算公式或者函数也可以,可以另外定义一个函数,函数的返回值可以是结构体或者指针,而参数就是这个变化的长度。
char* TEST(int len){
char *p;p=(char *)malloc(len);return p;
}
调用:char *a = TEST(获取长度的其他函数);