使用ctypes从Python调用带有Char **参数的C方法

时间:2013-10-02 11:57:52

标签: python c pointers char ctypes

我需要一种方法将数组从Python传递给char *,使用ctypes库到C库。

我尝试过的一些方法会导致我出现分段错误,其他方法则会导致信息垃圾。

1 个答案:

答案 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的正确类型以避免分段错误......