c语言小问题
在设计程序的时候,遇到一点疑惑,请教一下大家是怎么设计的。
函数:bool function(int condition, void *buffer),目的就是通过不同的条件在文件中得到一段数据存在buffer中。
然后在外部调用的时候比如Struct suo[NUM]; 调用fuction(condition, suo); 然后就可以把数据拷贝到suo数组中去了。
问题是condition不同,提取到的数据也不同,因而buffer是大小未知的。也就是说NUM是不知道。我想了想,可以在function内malloc一段内存,在function外部使用后再去free,但是这样想使用数组的话,也还是不知道NUM,使用起来也还是很不方便。
请教大家,写这种函数,还想把数据拷贝到数组,该怎么设计呢?
或者有其他的一些好的方法也行。
[解决办法]
不知道num的还是用指针好了
[解决办法]
用指针呗,根据条件的不同动态分配新的大小,new sizeof(int)*sizeof(condition)
[解决办法]
bool function(const int condition, struct OOXX *&buffer, int &size);
{
//根据条件 计算size大小
size = XX;
buffer = (struct OOXX *)malloc(sizeof(struct OOXX) * size);
if(NULL == buffer)
{
return false;
}
//do what u want
return true;
}
好了 即分配了空间 也通过引用size 返回了真实大小 可以安全删除啦
free(buffer);
buffer = NULL;
[解决办法]
其实删除不需要知道指针大小,又不是二维数组
[解决办法]
要么动态申请内存,要么把NUM弄大点
[解决办法]
问题是condition不同,提取到的数据也不同,因而buffer是大小未知的。也就是说NUM是不知道。我想了想,可以在function内malloc一段内存,在function外部使用后再去free,但是这样想使用数组的话,也还是不知道NUM,使用起来也还是很不方便。
--条件不同,但是调用函数前你应该知道要拷贝的原始数据吧,计算出它的字节数.
然后malloc相应字节数的内存.
建议函数的返回值为形参buffer:
void *function(int condition, void *buffer)
{
switch(condition) {
case 1:
buffer=malloc(sizeof(size1));
复制内容到buffer.
break;
...
}
return buffer;
}
这样外面调用形式如:
char *p = NULL;
p = (char *)function(1, p);
..
[解决办法]
上面使用完后 :
char *p = NULL;
p = (char *)function(1, p);
..
要
free(p);
[解决办法]
const int MAX_NUM=1000;