0

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 ではありません。

この状況で何が問題なのですか?

4

1 に答える 1

0

最後のステートメントp2自体が出力されます。(ポインターへのポインター)。

p2最後のステートメントの前に like ステートメントを逆参照する必要があります。

printf("%p\n", (void *) *p2);
于 2013-10-23T03:39:05.367 に答える