我需要一种方法将数组从Python传递给char *,使用ctypes库到C库。
我尝试过的一些方法会导致我出现分段错误,其他方法则会导致信息垃圾。
答案 0 :(得分:3)
由于我一直在努力解决这个问题,所以我决定写一个小小的HowTo,以便其他人可以受益。
拥有这段C代码:
void passPointerArray(int size, char **stringArray) {
for (int counter=0; counter < size; counter++) {
printf("String number %d is : %s\n", counter, stringArray[counter]);
}
}
我们想使用ctypes从python中调用它(有关ctypes的更多信息可以在上一篇文章中找到),所以我们写下以下代码:
def pass_pointer_array():
string_set = [
"Hello",
"Bye Bye",
"How do you do"
]
string_length = len(string_set)
select_type = (c_char_p * string_length)
select = select_type()
for key, item in enumerate(string_set):
select[key] = item
library.passPointerArray.argtypes = [c_int, select_type]
library.passPointerArray(string_length, select)
现在我读它看起来很简单,但我很喜欢找到传递给ctypes的正确类型以避免分段错误......