帮忙看看这个函数的问题
函数如下:
char *get_sqlData(SQLHSTMT HStmt, SQLUSMALLINT cl_num){
SQLINTEGER str_len = 0;
char tmpstr[1024];
char *cl_data;
memset(tmpstr,0,1024);
//循环获得列中的值,先执行一次获得列中的值的长度
SQLGetData(HStmt, cl_num, SQL_C_CHAR, tmpstr, 0, &str_len);
cl_data = (char *) malloc(str_len + 1);
strcpy(cl_data,tmpstr);
memset(tmpstr,0,1024);
while ((SQLGetData(HStmt, cl_num, SQL_C_CHAR, tmpstr, 1024, &str_len)) != SQL_NO_DATA)
//多次调用SQLGetData 一直等到所有数据被取出
{
strcat(cl_data,tmpstr);
memset(tmpstr,0,1024);
}
return cl_data;
}
这个函数的功能是从结果集中取出每个字段的值,但是此值比较大,需要多次获取。
我也发现了一些问题,但是不知道如何解决?我发现的问题如下:
1.当第一次&str_len的长度小于1024时,strcpy(cl_data,tmpstr)就会出错;
2.cl_data = (char *) malloc(str_len + 1); 这种在函数内动态分配的内存,该如何去释放?
希望各位大牛帮忙检查以下还有什么问题,并且能够给出解决方法。
我是刚刚开始接触c语言,很多东西搞得不是很清楚!
[解决办法]
1.当第一次&str_len的长度小于1024时,strcpy(cl_data,tmpstr)就会出错;
————————————————————————————————————
当然会出错了,你这里定义char tmpstr[1024];tempstr是1024。
cl_data = (char *) malloc(str_len + 1);
strcpy(cl_data,tmpstr);
_________________________________________________________
这里如果str_len的长度小于1024的时候,cl_data放不下tempstr。
2。直接free(cl_data)释放好了。。
[解决办法]
1.当第一次&str_len的长度小于1024时,strcpy(cl_data,tmpstr)就会出错;
------------------------
tmpstr比cl_data占用内存大,出错
2、
free
[解决办法]
如果直接释放的话,我怎么把这个值传递到函数外面使用呢?
———————————————————————————————
在程序最后执行完之前释放。。。