ctypes以NULL结尾的数组

时间:2013-10-23 03:28:15

标签: python arrays ctypes

我想使用ctypes在我的python代码中包装一个dll库。我想提供以NULL结尾的以NULL结尾的字符串数组。在我的python代码中,a 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。

在这种情况下出了什么问题?

1 个答案:

答案 0 :(得分:0)

最后一个语句打印p2本身。 (指向指针的指针)。

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

printf("%p\n", (void *) *p2);