二维数组问题(急急急)
有个函数的定义是这样的
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




