ctypes和python之间的值转换错误

ctypes和python之间的值转换错误,python,c,ctypes,Python,C,Ctypes,我在使用以下代码进行C和python之间的类型转换时遇到问题: 例c: 汇编方式: 以及python代码: 将值打印给我: 0 140715720703376 同样的情况也发生在我使用ctypes.c_longlong时 为了好玩,我曾经用过c_int,它会打印: 1 0 我不太明白我在这里做错了什么。long arr[2]是堆栈上的本地数组。返回该数组的地址是未定义的行为 您可以将数组设为静态长arr[2],这样就可以工作。long arr[2]是堆栈上的本地数组。返回该数组的地址是未定

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

例c:

汇编方式:

以及python代码:

将值打印给我:

0
140715720703376
同样的情况也发生在我使用ctypes.c_longlong时

为了好玩,我曾经用过c_int,它会打印:

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

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

您可以将数组设为静态长arr[2],这样就可以工作。

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


您可以使数组静态为long arr[2],这样就可以工作。

谢谢,我也从编译器那里得到了警告,但不知道该怎么做。有没有一种方法可以在不使用静态的情况下实现这一点?malloc,但是您必须释放它,或者使用ctypes.create_string_buffer从Python传递一个缓冲区和一个大小,以便Python管理内存。谢谢,我也收到了来自编译器的警告,但不知道如何使用它。有没有一种方法可以在没有静态数据的情况下实现这一点?malloc,但是您必须释放它,或者使用ctypes.create\u string\u buffer从Python传递一个缓冲区和一个大小,以便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
1
0