我在使用以下代码进行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
我不太明白我在这里做错了什么。
答案 0 :(得分:4)
long arr[2]
是堆栈上的本地数组。返回该数组的地址是未定义的行为。
你可以制作数组static long arr[2]
,它会起作用。