Python ctypes and char**

ctypes, python

Solution

I use this in my code:

POINTER(POINTER(c_char))

But I think both are equivalent.

Edit: Actually they are not http://docs.python.org/2/library/ctypes.html#ctypes.c_char_p

ctypes.c_char_p Represents the C char * datatype when it points to a zero-terminated string. For a general character pointer that may also point to binary data, POINTER(c_char) must be used. The constructor accepts an integer address, or a string.

So `POINTER(POINTER(c_char))` is for binary data, and `POINTER(c_char_p)` is a pointer to a C null-terminated string.

Problem

I have the following structures in C: ``` struct wordSynonym { wchar_t* word; char** synonyms; int numSynonyms; }; struct wordList { wordSynonym* wordSynonyms; int numWords; }; ``` And, I have the following in Python: ``` class wordSynonym(Structure): _fields_ = [ ("word", c_wchar_p), ("synonyms", POINTER(c_char_p)), # Is this correct? ("numSynonyms", c_int) ]; class WordList(Structure): _fields_ = [ ("wordSynonyms", POINTER(wordSynonym)), ("numWords", c_int)]; ``` What is the correct way to reference `char**` in python? That is, in the Python code, is `POINTER(c_char_p)` correct?

Original source