ctypes を使用して、Python コードで dll ライブラリをラップしたいと考えています。NULL で終わる文字列の NULL で終わる配列をフィードしたいと思います。私のpythonコードでは、ctype配列はによって開始されます
L = ['foo','bar', None] # to get a NULL terminated array
arr = (ctypes.c_char_p * 3)(*L)
lib.myfunc(None, arr)
myfunc.c には、
void myfunc(char* p1, char** p2){
printf("%p\n", (void *) p1);
printf("%s\n", *p2);p2++;
printf("%s\n", *p2);p2++;
printf("%p\n", (void *) p2);
}
Pythonコードを実行すると、
(nil)
foo
bar
0x1eb8150
これは、最初のポインター (None) が NULL ポインターとして正しく認識されることを意味します。しかし、p2 が指す 3 番目 (最後) の項目は NULL ではありません。
この状況で何が問題なのですか?