在 Py_BuildValue 中返回变量字符串

returning a variable string in Py_BuildValue

本文关键字:返回 变量 字符串 BuildValue Py      更新时间:2023-10-16

我正在用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()
' Xx0e'

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

我错过了什么?

谢谢

[Python

3.Docs]:解析参数和构建值 - 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());