我试图使用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/

10-11 22:09
查看更多