首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

帮忙看看这个函数的有关问题

2012-02-23 
帮忙看看这个函数的问题函数如下:char*get_sqlData(SQLHSTMTHStmt,SQLUSMALLINTcl_num){SQLINTEGERstr_len

帮忙看看这个函数的问题
函数如下:
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
[解决办法]
如果直接释放的话,我怎么把这个值传递到函数外面使用呢?
———————————————————————————————
在程序最后执行完之前释放。。。

热点排行