【发布时间】:2013-10-31 05:22:57
【问题描述】:
我正在通过以下示例学习如何使用 ctypes,但出现了奇怪的问题..
c文件在这里:
typedef struct post {
char *x;
char *y;
int x_z;
} post_t;
void
foo (post_t *o, char *src)
{
int i=0;
char *p = src;
int len = strlen(src);
for (; *p != '\0'; i++, p++) {
if (*p == 'x') {
o->x = p;
o->x_z = len-i;
}
}
o->y=src;
}
python 代码在这里(test.oy):
from ctypes import *
foolib = CDLL("./foolib.so")
class Post(Structure):
_fields_ = (
("x", c_void_p),
("y", c_void_p),
("x_z", c_int),
)
o = Post()
s = "iooxooiddfggggggggggggvd"
foolib.foo(byref(o), create_string_buffer(s))
print o.x_z
print string_at(o.x, o.x_z)
print string_at(o.y, len(s))
结构post 映射到python class。 C 文件将是一个动态库foolib.so:
gcc -fPIC -shared -o傻瓜.so傻瓜.c
但是,奇怪的是,当我运行python test.py 时,我得到了以下输出:
21
ooiddfggggggggggggvd
ooiddfggggggggggggvd
但string_at(o.y, len(s)) 除外iooxooiddfggggggggggggvd。
我的代码哪里出了问题?谢谢。
顺便说一下,为了快速测试,我把代码放在了要点上:https://gist.github.com/hit9/7244344
【问题讨论】: