3

我有一个 C++ 例程 MyClass::myFunction(char * message)。它通过写入消息缓冲区来返回消息。该例程通过 SWIG 导出到 python。当调用例程时,我假设 char * 指向与字符串关联的 python 分配的内存区域。

现在,SWIG 文档说修改这个缓冲区的内容是一个好主意,这是有道理的,因为字符串应该是不可变的。所以现在的问题是:处理这个案子的正确方法是什么?

4

1 回答 1

1

听起来你需要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选项可能对您的情况有用。

于 2013-10-09T08:32:36.300 回答