我试图使用python对象与python进行通信..在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'可能在此函数中未初始化使用 [-Wuninitialized]
但仍然会打印出值,如何初始化'vars'?以及如何在test.py
中检索test.c中分配的值请建议..
答案 0 :(得分:2)
你的代码被严重破坏了。您的getval
函数将数据存储在内存中的随机位置。这可能会腐败,并可能最终导致程序崩溃。
*var=5;
为了实现这一目标,var
需要指向某事。但是var并没有指向任何东西,因为你从未设置它。
我猜你知道python并且只是从C开始。我建议你在尝试使用python和c之前先学习一段时间。你的C代码显示你对C的工作原理非常困惑,并且在解决之前很难使用Python / C api。