2012-03-31 100 views
0

我曾尝试使用python对象与蟒蛇进行沟通ç..在C面我值存储到一个指针变量..当我回到它,我在Python端得到一个Python对象..是有可能检索“python对象中的那些指针值”在python方面?如何从python对象检索值?

test1.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. 

我已经修改了这个请我怎么能retrive值蟒蛇侧

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]

警告:‘乏乏’可在此功能 [-Wuninitialized]

但仍值获得印刷,,我怎么能初始化使用未初始化‘’?如何检索test.c的分配值test.py

请建议..

+4

添加代码,请;)请记住,英语是不是完全不区分大小写... – 2012-03-31 13:05:05

+0

使用malloc去除,可以使用这个功能初始化警告“瓦尔” [-Wuninitialized] – ranjan 2012-04-01 07:16:04

回答

2

你的代码是可怕的坏了。您的getval函数将数据存储在随机存储器中。这很容易腐败,最终可能会导致程序崩溃。

*var=5; 

对于这个工作,var需要指向的东西。但var不指向任何东西,因为你从来没有设置它。

我会猜,你知道蟒蛇,并刚刚与C开始,我会建议你学习C本身了,而试图使用Python之前和C一起。你的C代码显示你对C的工作方式感到非常困惑,并且在补救之前,它很难与Python/C API一起工作。

+0

这真的是,如果你有帮助请纠正上面的代码,这样我可以在Python端 – ranjan 2012-04-01 04:38:33

+0

从C面发值的数组和检索或者是有可能返回比Python对象 – ranjan 2012-04-01 04:49:06

+0

整数数组如何返回64位整型值 – ranjan 2012-04-01 05:31:00