【发布时间】:2026-02-16 21:30:01
【问题描述】:
我有一个 C 函数,它在传递给的地址分配内存并通过 Python 访问。指针内容确实包含 C 代码中的结构数组,但我无法让 ctypes 正确访问第 0 个元素之外的数组。如何获得正确的内存偏移量以访问非零元素?如果我尝试使用他们的 ctypes.memset 函数,Python 的 ctypes.memset 会抱怨 TypeErrors。
typedef struct td_Group
{
unsigned int group_id;
char groupname[256];
char date_created[32];
char date_modified[32];
unsigned int user_modified;
unsigned int user_created;
} Group;
int getGroups(LIBmanager * handler, Group ** unallocatedPointer);
############# python code below:
class Group(Structure):
_fields_ = [("group_id", c_uint),
("groupname", c_char*256),
("date_created", c_char*32),
("date_modified", c_char*32),
("user_modified", c_uint),
("user_created", c_uint)]
myGroups = c_void_p()
count = libnativetest.getGroups( nativePointer, byref(myGroups) )
casted = cast( myGroups, POINTER(Group*count) )
for x in range(0,count):
theGroup = cast( casted[x], POINTER(Group) )
# this only works for the first entry in the array:
print "~~~~~~~~~~" + theGroup.contents.groupname
【问题讨论】:
-
您遇到什么错误?请添加整个回溯。
-
@yak:当一个人在玩 ctypes 时,回溯是一种并不总是可用的特权。如果你越界了,规范是 Python 解释器以段错误结束