在Py_BuildValue中返回一个变量字符串

时间:2018-03-21 00:05:58

标签: python c++ boost

我在C ++中编写以下内容作为测试用例:

using namespace boost::algorithm;
static PyObject* strtest(PyObject* self, PyObject* args)
{
    std::string s = "Boost C++ Libraries";
    to_upper(s);
    PyObject * python_val = Py_BuildValue("s", s);
    return python_val;
}

代码编译和导入,但产生的内容看起来像是对内存位置的引用。

>>> math_demo.strtest()
' X\x0e'

我期待'BOOST C++ LIBRARIES'作为返回值

我错过了什么?

由于

1 个答案:

答案 0 :(得分:1)

[Python]: PyObject* Py_BuildValue(const char *format, ...)(或任何其他 Python / C API 函数)适用于 C 类型而非 C ++

要解决此问题,请使用[cplusplus]: std::string::c_str

PyObject *python_val = Py_BuildValue("s", s.c_str());