3

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

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

4

1 回答 1

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 以避免分段错误......

于 2013-10-02T11:57:51.753 回答