我需要一种使用 ctypes 库将数组从 Python 传递给 char* 到 C 库的方法。
我尝试过的一些方法会导致我出现分段错误,而另一些则导致垃圾信息。
由于我已经在这个问题上苦苦挣扎了一段时间,我决定写一个小的 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 以避免分段错误......