0

我想使用 ctypes 在我的 python 代码中包装一个 dll 库。我想输入一个以 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 指向的第三个(最后一个)项目不是 NULL。

在这种情况下有什么问题?

4

1 回答 1

0

最后一条语句p2自行打印。(指向指针的指针)。

p2您应该在最后一个之前取消引用like 语句。

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