Python-CAPI:将C字符串打包到元组时遇到问题
在下面的代码中,我试图将两个以null结尾的C字符串(字符指针)打包到一个Python元组中Python-CAPI:将C字符串打包到元组时遇到问题,python,c,python-c-api,Python,C,Python C Api,在下面的代码中,我试图将两个以null结尾的C字符串(字符指针)打包到一个Python元组中 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
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函数)我想我得到了它——我以前使用堆栈空间以一种奇怪的方式存储单词。我开始在堆上手动为它们分配空间,这似乎已经解决了这个问题。我想我得到了它——我以前使用堆栈空间以一种奇怪的方式存储单词。我开始在堆上手动为它们分配空间,这似乎已经解决了问题。您的代码看起来是正确的。您是否包含了?您是否在编译时打开了所有警告(
-Wall
带gcc)?有时忘记包含会导致生成的代码错误地将指针参数传递给变量函数,例如Py\u BuildValue
。打开警告有助于捕获此类错误(以及其他许多错误)。此外,如果将Py\u BuildValue(…)
替换为cmpArgs=PyTuple\u New(2);PyTuple_SetItem(cmpArgs,0,PyString_FromString(words1->wordArray[i]);PyTuple_SetItem(cmpArgs,1,PyString_FromString(words2->wordArray[i]);
?如果这有帮助,它会指向Py_BuildValue
被阻塞,可能是由于缺少或损坏的头。我还需要哪些头?(我包括在内)尝试您的代码会将字符串弄得一团糟,并导致它进入无限循环。我是否会错误地计算引用?您的代码看起来是正确的。您是否#include
?是否在编译时启用了所有警告(-Wall
with gcc)?有时忘记一个#include
会导致生成的代码错误地将指针参数传递给变量函数,例如Py\u BuildValue
。打开警告有助于捕获此类错误(以及许多其他错误)。此外,如果将Py\u BuildValue(…)
替换为cmpArgs=PyTuple\u New(2)是否也有帮助PyTuple_SetItem(cmpArgs,0,PyString_FromString(words1->wordArray[i]);PyTuple_SetItem(cmpArgs,1,PyString_FromString(words2->wordArray[i]);
?如果这有帮助,它会指向Py_BuildValue
被阻塞,可能是由于缺少或损坏的头。我还需要哪些头?(我包括在内)尝试你的代码会把字符串弄得乱七八糟,并导致它进入无限循环。我是否会错误地计算引用数?