2012-03-31 85 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