我试图使用python对象与python进行c通讯。在c端我将值存储到指针变量..当我返回它时,我在python端得到了一个python对象。是否可以检索“那些python对象中的“ python对象的指针值”?
test.c文件
#include <stdio.h>
#include <stdlib.h>
int *getval() {
int *var;
int *var1;
int i;
var1=var;
*var=5;
var++;
*var=6;
return var1;
}
test1.c file
#include <Python.h>
static PyObject * getvals(PyObject * self, PyObject * args)
{
int *x;
x=getval();
PyObject * test = PyCapsule_New((int *)x, "int", NULL);
return test;
}
python file
import test1
x=test1.getvals()
something like this .. I want to get the values of the var file I have assigned in test.c in python file.
我已经对此进行了修改,请检查如何在python端检索值
test.c
uint64_t * getvar()
{
int i=0;
uint64_t * vars=(uint64_t *)malloc(sizeof(uint64_t));
for(i=0;i<3;i++)
{
var[i]=i;
printf("%llu\n",var[i]);
}
return vars;
}
test1.c
static PyObject * getlist(PyObject * self, PyObject * args)
{
int i;
uint64_t * mylist;
mylist=getvar();
for(i=0;i<3;i++)
printf("%llu\n",mylist[i]);
PyObject * my_list = PyCapsule_New((void *)my_list, "uint64_t", NULL);
return my_list;
}
test.py
import test1
x=test.getvals()
print x
在编译C文件时,我得到了这样的警告
格式为“%llu”,期望使用“ long long unsigned int”类型的参数,但
参数2的类型为'uint64_t'[-Wformat]
警告:“ vars”可能未在此函数中初始化使用
[-未初始化]
但仍然会打印出值,如何初始化'vars'?以及如何在test.py中检索在test.c中分配的值
请建议..
最佳答案
您的代码被严重破坏了。您的getval
函数将数据随机存储在内存中。这很容易损坏,最终可能会导致程序崩溃。
*var=5;
为此,
var
需要指向某个东西。但是var没有指向任何东西,因为您从未设置它。我会猜想您了解python并且只是从C入手。我建议您先尝试学习C一段时间,然后再尝试同时使用python和c。您的C代码使您对C的工作方式感到非常困惑,在纠正该问题之前,它很难与Python / C api一起使用。
关于python - 如何从python对象中检索值?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9956074/