我有一个 C++ 例程 MyClass::myFunction(char * message)。它通过写入消息缓冲区来返回消息。该例程通过 SWIG 导出到 python。当调用例程时,我假设 char * 指向与字符串关联的 python 分配的内存区域。
现在,SWIG 文档说修改这个缓冲区的内容是一个好主意,这是有道理的,因为字符串应该是不可变的。所以现在的问题是:处理这个案子的正确方法是什么?
听起来你需要cstring.i库:
cstring.i 库文件提供了一组宏,用于处理改变字符串参数或尝试通过其参数输出字符串数据的函数。
特别是%cstring_mutable
宏:
%include <cstring.i>
%cstring_mutable(char *ustr);
...
void make_upper(char *ustr);
在 Python 中:
>>> make_upper("hello world")
'HELLO WORLD'
参数名称很重要。在这种情况下,任何带有char *ustr
参数的函数都会受到影响。因此,要么使您的参数名称唯一,要么使所有可变字符串参数具有相同的名称。
请注意,还有一个expansion
选项可能对您的情况有用。