ctypes ライブラリを使用して Python から char* に配列を C ライブラリに渡す方法が必要です。
私が試したいくつかの方法は、セグメンテーション違反につながり、他の方法はゴミ情報につながりました。
私はこの問題にしばらく悩まされてきたので、他の人が恩恵を受けることができるように、小さなハウツーを書くことにしました。
この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 に渡す適切な型を見つけるのはとても楽しかったです...