【发布时间】:2012-11-02 03:56:19
【问题描述】:
在下面的代码中,我试图将两个以 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(PyTuple_GetItem(cmpArgs, 0)));
这会产生如下输出:
word1 = '20', word2 = '20'
i┴
为什么元组中的字符串与外部的字符串不同?我究竟做错了什么?另外,我需要担心增加和减少这个元组的引用计数吗? (我正在创建它以传递给作为 PyObject* 传递给 C 的 Python 函数)
【问题讨论】:
-
您的代码看起来正确。你
#include <Python.h>了吗?您是否在打开所有警告的情况下进行编译(-Wall使用 gcc)?有时忘记#include会导致生成的代码错误地将指针参数传递给可变参数函数,例如Py_BuildValue。打开警告有助于捕捉这种错误(以及许多其他错误)。 -
另外,将
Py_BuildValue(...)替换为cmpArgs = PyTuple_New(2); PyTuple_SetItem(cmpArgs, 0, PyString_FromString(words1->wordArray[i]); PyTuple_SetItem(cmpArgs, 1, PyString_FromString(words2->wordArray[i]);是否有帮助?如果这有帮助,则表明Py_BuildValue被破坏了,可能是由于标题丢失或损坏。 -
除了
之外我还需要哪些头文件? (我包括在内)尝试你的代码会严重地弄乱字符串并导致它进入无限循环。我是否会错误地计算参考文献?
标签: python c python-c-api