CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  基础类

二维数组问题(急急急)

楼主kyn(kyn)2004-09-04 00:01:25 在 VC/MFC / 基础类 提问

有个函数的定义是这样的  
  extern   "C"   DLLSMEPAPI   int   __cdecl   SMEP_Submit(  
  int     IN_ConnectID,  
                                      int       IN_DestCount,          
  const   char     Dest_Terminal_ID[][22]);  
  因为要发送的Dest_Terminal_ID(手机号)是不固定的.所以我用  
  手机号1:手机号2...这样的格式存放,  
  现在需要将这样的字串转成数组  
  我是这样做的  
  strline就是字串如"13600000000:13700000000:13800000000"  
   
  i=strline.GetLength();  
  strline1=strline.Replace(":","");  
  i-=strline1.GetLength();  
  i++;  
   
  char**   m_Dest_Terminal=new   char*[22];  
  for(int   j=0;j<=i;j++)  
        m_Dest_Terminal[i]=new   char[22];  
  i=0;  
  for   (   p=strtok(ss,":");p!=NULL;p=strtok(NULL,   ":"))  
  {  
            strcpy(m_Dest_Terminal[i],   p);  
            i++;  
  }  
   
  m_iStatus   =   SMEP_Submit(m_iConnectHand,i,m_Dest_Terminal);  
   
  但编译会出现  
  rror   C2664:   'SMEP_Submit'   :   cannot   convert   parameter   3   from   'char   **   '   to   'const   char   [][22]'       Types   pointed   to   are   unrelated;   conversion   requires   reinterpret_cast,   C-style   cast   or   function-style   cast  
  错误.  
   
  请教我的代码该如何改进?   或是有没有其它的办法能实现这样的功能.  
  谢谢,很急,接触VC时间不长,请高手帮帮忙.... 问题点数:100、回复次数:16Top

1 楼pomelowu(羽战士)回复于 2004-09-04 00:11:17 得分 1

可以用CArrayTop

2 楼kyn(kyn)回复于 2004-09-04 00:22:13 得分 0

楼上的能不能帮忙写点具体的代码???麻烦了.Top

3 楼flyelf(空谷清音)回复于 2004-09-04 09:03:09 得分 1

把接口的const   char   Dest_xxx[][22]改为const   char   **Dest_xxxTop

4 楼pomelowu(羽战士)回复于 2004-09-04 09:05:48 得分 0

加班中,太忙了,不好意思,不过下面的文章是个很好的参考:  
  http://www.china-askpro.com/msg25/qa74.shtml  
   
  另外,你的代码中还有不少问题。你可能应该用CString::Remove,而不是CString::Replace;还有,复制字符串用strcpy会把字符串末尾的\0也考进去,还是用memcpy比较好。Top

5 楼pomelowu(羽战士)回复于 2004-09-04 09:07:02 得分 1

for(int   j=0;j<=i;j++)  
        m_Dest_Terminal[i]=new   char[22];  
   
  上面这段代码也是有问题的Top

6 楼huwei001982(凶猛的小狗)回复于 2004-09-04 09:36:58 得分 1

char**   m_Dest_Terminal=new   char*[22];  
  修改成  
  char**   m_Dest_Terminal=new   (char*)[22];Top

7 楼kyn(kyn)回复于 2004-09-04 10:43:24 得分 0

各位還有什麼辦法嗎,接口定义不能改的,因为DLL是别的公司提供的,我没有源码,我也试过修改定义,会出现内存不可读的错误.    
  请高手指教!Top

8 楼kyn(kyn)回复于 2004-09-05 20:06:16 得分 0

高手都去那了,帮帮忙呀...Top

9 楼Mackz(在相互)回复于 2004-09-05 20:16:45 得分 0

多维数组只有最右面的才可以不确定。Top

10 楼zj7961767520(大宝)回复于 2004-09-05 21:47:42 得分 0

upTop

11 楼csdn_cht(欣欣兽)回复于 2004-09-05 22:09:58 得分 1

借口改不了那就改你自己的数组定义好了。  
  char*   m_Dest_Terminal[]=new   char*[i];Top

12 楼queena(土豆)回复于 2004-09-05 22:37:59 得分 0

最好是要看看API  
  Top

13 楼iicup(双杯献酒)回复于 2004-09-06 00:11:43 得分 95

//   VC   6.0  
  #include   <windows.h>  
  #include   <iostream>  
  using   namespace   std;  
   
  #define   DLLSMEPAPI  
   
  //   模拟函数  
  extern   "C"   DLLSMEPAPI   int   __cdecl   SMEP_Submit(  
  int     IN_ConnectID,  
  int       IN_DestCount,          
  const   char     Dest_Terminal_ID[][22]);  
   
  //   假设以""作为数组结尾  
  extern   "C"   DLLSMEPAPI   int   __cdecl   SMEP_Submit(  
  int     IN_ConnectID,  
  int       IN_DestCount,          
  const   char     Dest_Terminal_ID[][22])  
  {  
  int   i   =   0;  
  for(i   =   0;   Dest_Terminal_ID[i][0]   !=   '\0';   ++i)  
  {  
  cout   <<   Dest_Terminal_ID[i]   <<   endl;  
  }  
  return   i;  
  }  
   
  int   main()  
  {  
  //   原始数据  
  char   strline[]   =   "13600000000:13700000000:13800000000";  
  //   计算字符串个数  
  int   nNum   =   0;  
  for(int   i=0;   strline[i]   !=   0;   ++i)  
  {  
  if((i==0)&&(strline[i]   !=   ':'))  
  {  
  nNum++;  
  }  
  if((strline[i]   ==   ':')&&(strline[i+1]   !=   '\0'))  
  {  
  nNum++;  
  }  
  }  
   
  //   分解  
  typedef     char   DestBuf[22];  
   
  DestBuf*   buf   =   new   DestBuf[nNum+1];   //!!!   必须一次分配,不能分多次分配内存。  
   
  if(buf   ==   0)  
  {  
  return   0;  
  }  
   
  char*   p   =   0;  
  int   nIndex   =   0;  
  for   (   p=strtok(strline,":");p!=NULL;p=strtok(NULL,   ":"))  
  {  
            strcpy(buf[nIndex],   p);  
            nIndex++;  
    if(nIndex>nNum)  
    {  
    break;  
    }  
  }  
  buf[nIndex][0]   =   0;  
   
  //   调用  
  int   m_iStatus   =   0;    
  int   m_iConnectHand   =   0;  
  int   m_i   =   0;  
   
  m_iStatus   =   SMEP_Submit(m_iConnectHand,m_i,buf);  
   
  delete[]   buf;  
  buf   =   0;  
   
  return   0;  
  }  
   
  //   运行结果:  
  /*  
  13600000000  
  13700000000  
  13800000000  
  */Top

14 楼weakwater(我是河南人)回复于 2004-09-06 17:58:45 得分 0

帮你UPTop

15 楼kyn(kyn)回复于 2004-09-07 21:09:17 得分 0

感谢iicup(双杯献酒)帮我写代码,  
  Top

16 楼kyn(kyn)回复于 2004-09-07 21:16:20 得分 0

成功了,结贴,再次感谢iicup(双杯献酒)!!Top

相关问题

  • 急!急!急! 如何实现一维数组到二维数组的转换?
  • 急!急!急! 如何实现一维数组到二维数组的转换?
  • 关于 :二维动态数组的小问题!请各位大侠帮忙!急!急!急!急!急!急!
  • 二维数组
  • 动态二维数组的问题..急
  • 急急急!!!关于两个二维数组中的对应行列值比较的问题,帮帮我,在线等待。送高分,谢谢
  • oracle 二维数组
  • 急急!关于数组的问题!
  • 二维数组的大小由用户输入,如何用new来动态分配一个二维数组?急
  • 求二维数组排列,下二维的下标,~~~~~~~~~~在线等,急啊!

关键词

  • 手机
  • 数组
  • dllsmepapi
  • connectid
  • destcount
  • strline
  • dest
  • terminal
  • cdecl smep
  • submit

得分解答快速导航

  • 帖主:kyn
  • pomelowu
  • flyelf
  • pomelowu
  • huwei001982
  • csdn_cht
  • iicup

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo