c++与python关于二维数组的数据传递问题,刚注册没有分,以后一定补上,好新人帮帮忙
16lz
2021-01-22
公司用python开发自动化测试框架,采用C++封装API的一些函数,通过ctypes模块与python进行数据通信,现在遇到一个问题入下:
c++的dll封装一个获取机器IP的函数,IP采用字符串保存,由于机器可能包含多个IP,所以采用二维数组进行保存,代码如下:
extern"C"intGetIpAddress(char**pIpAddList)
{
for(inti=0;i<10;i++)
strcpy(pIpAddList[i],ipAddress);
//ipAddress为IP地址
}
程序已经通过C++编写的DEMO测试没有问题。
PYTHON方面采用ctypes,但不知道如何分配内存空间获取该地址列表。
网上找了一遍类似的问题采用方法为
defGetIpAddress():
ipAddList=(c_char_p*2)()
dll.GetIpAddress(pointer(ipAddList))
会报accessviolationwriting0x00000000错误怀疑是分配的内存空间不对,因为我在写C++Demo调用的时候是自己分配了内存空间的
char**pIpAddress;
pIpAddress=newchar*[10];
for(inti=0;i<10;i++)
pIpAddress[i]=newchar[16];
fn(pIpAddress);
而在python中没有类似的操作。
想知道如何声明内存空间才可以获取到我需要的信息,这个问题搞了两天,耽误了很多工作,很急,在线等。。。
支持新人
c++的dll封装一个获取机器IP的函数,IP采用字符串保存,由于机器可能包含多个IP,所以采用二维数组进行保存,代码如下:
extern"C"intGetIpAddress(char**pIpAddList)
{
for(inti=0;i<10;i++)
strcpy(pIpAddList[i],ipAddress);
//ipAddress为IP地址
}
程序已经通过C++编写的DEMO测试没有问题。
PYTHON方面采用ctypes,但不知道如何分配内存空间获取该地址列表。
网上找了一遍类似的问题采用方法为
defGetIpAddress():
ipAddList=(c_char_p*2)()
dll.GetIpAddress(pointer(ipAddList))
会报accessviolationwriting0x00000000错误怀疑是分配的内存空间不对,因为我在写C++Demo调用的时候是自己分配了内存空间的
char**pIpAddress;
pIpAddress=newchar*[10];
for(inti=0;i<10;i++)
pIpAddress[i]=newchar[16];
fn(pIpAddress);
而在python中没有类似的操作。
想知道如何声明内存空间才可以获取到我需要的信息,这个问题搞了两天,耽误了很多工作,很急,在线等。。。
22 个解决方案
#1
支持新人