【发布时间】:2013-05-17 23:29:48
【问题描述】:
我正在尝试使用 ctypes 在 python 中创建一个 char * 数组,以传递给用于填充字符串的库。我期望 4 个字符串返回,每个字符串的长度不超过 7 个字符。
我的py代码是这样的
testlib.py
from ctypes import *
primesmile = CDLL("/primesmile/lib.so")
getAllNodeNames = primesmile.getAllNodeNames
getAllNodeNames.argtypes = [POINTER(c_char_p)]
results = (c_char_p * 4)(addressof(create_string_buffer(7)))
err = getAllNodeNames(results)
lib.cpp
void getAllNodeNames(char **array){
DSL_idArray nodes; //this object returns const char * when iterated over
network.GetAllNodeIds(nodes);
for(int i = 0; i < (nodes.NumItems()); i++){
strcpy(array[i],nodes[i]);
}
}
当我尝试运行此代码时,我不断收到分段错误。我已经从 C 创建了一个完美运行的测试,但在 Python 中我必须错误地设置指针数组或其他东西。它似乎到达了循环中的第二个节点,然后出现了一个问题,正如我从将数据吐出到命令行中看到的那样。任何见解将不胜感激。
【问题讨论】: