1
다음 코드에서는 두 개의 null 종결 C 문자열 (char 포인터)을 파이썬 튜플에 압축하려고합니다.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┴
왜 그것을 외부보다 튜플 다른 문자열? 내가 도대체 뭘 잘못하고있는 겁니까? 또한이 튜플의 참조 카운트를 증가 및 감소시키는 것에 대해 걱정할 필요가 있습니까? (Python 함수를 C로 PyObject *로 전달하는 파이썬 함수에 전달하려고합니다.)
코드가 올바르게 보입니다. '#include'을 했습니까? 모든 경고가 켜지면서 컴파일하고 있습니까 ('-Wall' with gcc)? 때때로'#include '를 잊어 버리면 생성 된 코드가 포인터 인자를 Py_BuildValue와 같은 변수 함수에 잘못 전달할 수 있습니다. 경고를 켜면 그런 종류의 버그 (그리고 많은 다른 것들)를 잡는 데 도움이됩니다. –
user4815162342
또한'Py_BuildValue (...)'를'cmpArgs = PyTuple_New (2);로 바꾸면 도움이됩니까? PyTuple_SetItem (cmpArgs, 0, Python_FromString (words1-> wordArray [i]); PyTuple_SetItem (cmpArgs, 1, PyString_FromString (words2-> wordArray [i]);'도움이된다면, 'Py_BuildValue' – user4815162342