2012-11-01 34 views
1

在下面的代碼中,我試圖將兩個以null結尾的C字符串(char指針)打包到Python元組中。Python-C API:無法將C字符串打包成元組

printf("word1 = '%s', word2 = '%s'\n", words1->wordArray[i], words2->wordArray[i]); 
cmpArgs = Py_BuildValue("ss", words1->wordArray[i], words2->wordArray[i]); 
printf("%s\n", PyString_AsString(PyTuple_GetItem(cmpArgs, 0))); 

這將產生類似的輸出:

word1 = '20', word2 = '20' 
i┴ 

爲什麼在元組比外面不同的字符串?我究竟做錯了什麼?另外,我是否需要擔心遞增和遞減此元組的引用計數? (我創建它傳遞給作爲PyObject *傳遞給C的Python函數)

+1

您的代碼看起來正確。你有沒有#include '?你是否編譯了所有打開的警告('-Wall' with gcc)?有時候忘記'#include'可能會導致生成的代碼錯誤地將指針參數傳遞給可變參數函數,例如'Py_BuildValue'。打開警告有助於捕捉這種錯誤(以及其他許多錯誤)。 – user4815162342

+1

另外,如果用'cmpArgs = PyTuple_New(2)替換'Py_BuildValue(...)'有幫助嗎? PyTuple_SetItem(cmpArgs,0,PyString_FromString(words1-> wordArray [i]); PyTuple_SetItem(cmpArgs,1,PyString_FromString(words2-> wordArray [i]);如果有幫助,它指向Py_BuildValueborked,由於丟失或損壞的頭文件 – user4815162342

+0

除了之外,我還需要什麼頭文件?(包括我在內)嘗試你的代碼可怕地弄亂了字符串,並導致它進入無限循環。 – dpitch40

回答

1

我想我得到了它 - 我以前使用堆棧空間以奇怪的方式存儲單詞。我開始在堆上爲他們手動分配空間,似乎已經修復了這個問題。

相關問題