2012-11-01 2 views
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 *로 전달하는 파이썬 함수에 전달하려고합니다.)

+1

코드가 올바르게 보입니다. '#include '을 했습니까? 모든 경고가 켜지면서 컴파일하고 있습니까 ('-Wall' with gcc)? 때때로'#include '를 잊어 버리면 생성 된 코드가 포인터 인자를 Py_BuildValue와 같은 변수 함수에 잘못 전달할 수 있습니다. 경고를 켜면 그런 종류의 버그 (그리고 많은 다른 것들)를 잡는 데 도움이됩니다. – user4815162342

+1

또한'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

+0

외에 어떤 헤더가 필요한가요? (내가 포함) 코드를 썼을 때 문자열이 끔찍하게 엉망이되어 무한 루프가됩니다. 참조가 잘못 계산 될 수 있습니까? – dpitch40

답변

1

나는 그것을 얻었을 것이라고 생각합니다. 이전에 스택 공간을 사용하여 이상한 방법으로 단어를 저장하고있었습니다. 나는 수동으로 힙에 공간을 할당하기 시작했다.

관련 문제