6

私はCで次の構造を持っています:

struct wordSynonym
{
    wchar_t* word;
    char** synonyms;
    int numSynonyms;
};

struct wordList
{
    wordSynonym* wordSynonyms;
    int numWords;
};

そして、私は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)];

char**Pythonで参照する正しい方法は何ですか? つまり、Python コードではPOINTER(c_char_p)正しいですか?

4

1 に答える 1

5

私は自分のコードでこれを使用します:

POINTER(POINTER(c_char))

しかし、私はどちらも同等だと思います。

編集: 実際には http://docs.python.org/2/library/ctypes.html#ctypes.c_char_pではありません

ctypes.c_char_p ゼロで終わる文字列を指す場合、C の char * データ型を表します。バイナリ データを指す可能性のある一般的な文字ポインターの場合は、POINTER(c_char)を使用する必要があります。コンストラクターは、整数アドレスまたは文字列を受け入れます。

バイナリPOINTER(POINTER(c_char))データの場合も同様でPOINTER(c_char_p)、C ヌル終了文字列へのポインターです。

于 2012-10-31T15:10:13.703 に答える