我需要将regexitem * regex转换为ctype变量,任何想法?
C函数需要func(regexitem * regex)
char *regex1Groups[] = { "a","b","x","s" ,NULL};
char *regex2Groups[] = { "l" ,NULL};
regexitem regex[] = {
{"bla", regex1Groups,4 },
{"bla2",regex2Groups,1 }
};
首先我定义了
class regexitem(Structure):
_fields = ("regex",c_char_p), ("groups",c_char_p*size), ("groupsize",c_int)
并遇到第一个问题,声明了regexitem数组,因为预先不知道组的大小。
答案 0 :(得分:2)
结构只能在它们的末尾包含可变长度的数组,并且当你将数组变量分配给你没有复制它的东西时,你要分配数组的第一个元素的内存位置。所以我打赌你的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
数组就像这样:
regex = (regexItem * 2)(("bla", regex1Groups, 4),
("bla2", regex2Groups, 1))
如果您想了解更多信息,请查看ctypes
文档。