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函數)
您的代碼看起來正確。你有沒有#include'?你是否編譯了所有打開的警告('-Wall' with gcc)?有時候忘記'#include'可能會導致生成的代碼錯誤地將指針參數傳遞給可變參數函數,例如'Py_BuildValue'。打開警告有助於捕捉這種錯誤(以及其他許多錯誤)。 –
user4815162342
另外,如果用'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
除了之外,我還需要什麼頭文件?(包括我在內)嘗試你的代碼可怕地弄亂了字符串,並導致它進入無限循環。 –
dpitch40