ctypes和python之间的值转换是错误的

时间:2014-12-06 10:30:25

标签: python c ctypes

我在使用以下代码进行C和python之间的类型转换时遇到问题:

example.c:

long *ex_func(void)
{
    long arr[2] = {0L, 0L};
    return arr;
}

编译通过:

gcc -shared -Wall -o example.so -fPIC example.c

和python代码:

import ctypes
f = ctypes.CDLL("./example.so").ex_func
f.restype = ctypes.POINTER(ctypes.c_long * 2)
for i in f().contents:
    print i

打印我的值:

0
140715720703376

同样也发生了我使用ctypes.c_longlong

只是为了它的乐趣,我曾经使用c_int并打印出来:

1
0 

我不太明白我在这里做错了什么。

1 个答案:

答案 0 :(得分:4)

long arr[2]是堆栈上的本地数组。返回该数组的地址是未定义的行为。

你可以制作数组static long arr[2],它会起作用。