当前位置:  技术问答>linux和unix

极具挑战性的问题:动态申请内存,再用来存储二维字符串数组

    来源: 互联网  发布时间:2015-10-15

    本文导语:  用C写了一个操作MySql的程序,想将操作MySql后得到的数据写入到一个结构中去,以便以后处理,这个结构如下: struct mysqlAdo { int nFlag; //操作结果标志,0:成功,其它表示失败 int nRow; //结果集的行数 int nCol;  //结果集的列数 ...

用C写了一个操作MySql的程序,想将操作MySql后得到的数据写入到一个结构中去,以便以后处理,这个结构如下:
struct mysqlAdo
{
int nFlag; //操作结果标志,0:成功,其它表示失败
int nRow; //结果集的行数
int nCol;  //结果集的列数
char pData[][]; //存放结果集
}
那三个整形数据没有问题,就是最后一个,我的这个定义可能是错误的,意思就是这样的:用pData[0][1]就可以取出结

果集的第0行,第2列的数据,以此类推,我现在不知道怎样定义这个pData好一点,也不知道该怎样为其申请内存空间,再

怎样释放,因为这一切都是动态的,不知道结果集的总字节是多少,也不清楚怎样在分配的空间中划分成一个二维字符

串数组的样子,也不清楚如何将数据写入这个结构中,都愁死了,我的LINUX基础很不好,VC++倒还可以,但用纯C来完成

这个东东,真是没有思路,请大家帮忙了多谢.

|
#pragma pack(1)
typedef struct mysqlAdo
{
     int nFlag; /*操作结果标志,0:成功,其它表示失败*/
     int nRow; /*结果集的行数*/
     int nCol;  /*结果集的列数*/
     char pData[1]; /*存放结果集*/
}mysqlAdo;
#pragma pack()

__inline char * GetArray(mysqlAdo *pThis, int x)/*取第x行*/
{
return pThis->pData+pThis->nCol*x;
}

__inline char GetCharVal(mysqlAdo *pThis, int x, int y)/*取x行第y个字符*/
{
return GetArray(pThis, x)[y];
}

__inline void SetCharVal(mysqlAdo *pThis, int x, int y, char cVal)
{
GetArray(pThis, x)[y] = cVal;
}


/*测试代码*/
int main(int argc, char* argv[])
{
int nCol = 50, nRow = 5;
int i, j;

      mysqlAdo *pSqlAdo = (mysqlAdo *)malloc(sizeof(mysqlAdo)+nRow*nCol*sizeof(char));/*这里多分配了一点的内存,可以减出来*/

/*数据全部初始化为字符'#'*/
memset(pSqlAdo->pData, '#', nRow*nCol*sizeof(char));

pSqlAdo->nFlag = 0;
pSqlAdo->nRow = nRow;
pSqlAdo->nCol = nCol;

for(i=0; i

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 有挑战性的问题,大家一起讨论
  • 如何获得iptables的输出信息??????有挑战性阿!!!
  • 一个自定义java2 Swing JTree的问题??很有挑战性!!
  • 有关JBuilder的使用问题,很有挑战性
  • 如何用J2EE开发实时监控系统,非常有挑战性,请各位高手关注!!!
  • 一个关于ServletInputStream的中文问题,很有挑战性的!
  • 有挑战性的问题,想不想试一试
  • 请教!感觉Linux开发更具有挑战性,待遇相对要高一些,各位说一下,从事哪方面开发比较有前途...
  • 极富挑战性的问题啊!popen导致send函数失败的问题。


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3