Структуры могут содержать только массивы переменной длины на своих концах, и, кроме того, когда вы назначаете переменную массива чему-то, что вы не копируете, вы назначаете ячейку памяти первого элемента массива.Поэтому я уверен, что ваша структура regexitem
содержит указатель на массив указателей char
, а не сам массив указателей char
.Если это так, это может сработать:
class regexItem(Structure):
_fields_ = [("regex", c_char_p),
("groups", POINTER(c_char_p)),
("groupsize", c_int),
]
(Вы можете сохранить присвоение _fields_
как кортеж кортежей, а не как список кортежей, если хотите).
О, для ваших групп регулярных выражений это будет примерно так:
regex1Groups = (c_char_p * 5)("a", "b", "x", "s", None)
regex2Groups = (c_char_p * 2)("l", None)
И тогда ваш массив regexitem
s будет выглядеть так:
regex = (regexItem * 2)(("bla", regex1Groups, 4),
("bla2", regex2Groups, 1))
Просмотритеctypes
документация, если вы хотите узнать больше.
http://docs.python.org/library/ctypes.html