我在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'
作为返回值
我错过了什么?
由于
答案 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());