swig/python中处理char*返回数据的正确方法 我有C++例程MyClass::MyFoe[char消息]。它通过写入消息缓冲区来返回消息。此例程通过SWIG导出到python。调用例程时,我假设char*指向与字符串关联的python分配的内存区域

swig/python中处理char*返回数据的正确方法 我有C++例程MyClass::MyFoe[char消息]。它通过写入消息缓冲区来返回消息。此例程通过SWIG导出到python。调用例程时,我假设char*指向与字符串关联的python分配的内存区域,c++,python,swig,C++,Python,Swig,现在,作者说修改这个缓冲区的内容是baaad的想法,这是有意义的,因为字符串应该是不可变的。所以现在的问题是:处理这种情况的正确方法是什么?听起来你需要图书馆: i库文件提供了用于处理的宏集合 函数可以改变字符串参数,也可以尝试 通过参数输出字符串数据 尤其是%cstring_可变宏: %include <cstring.i> %cstring_mutable(char *ustr); ... void make_upper(char *ustr); 参数名很重要。在这种情况下,任

现在,作者说修改这个缓冲区的内容是baaad的想法,这是有意义的,因为字符串应该是不可变的。所以现在的问题是:处理这种情况的正确方法是什么?

听起来你需要图书馆:

i库文件提供了用于处理的宏集合 函数可以改变字符串参数,也可以尝试 通过参数输出字符串数据

尤其是
%cstring_可变
宏:

%include <cstring.i>
%cstring_mutable(char *ustr);
...
void make_upper(char *ustr);
参数名很重要。在这种情况下,任何带有
char*ustr
参数的函数都会受到影响。因此,要么使参数名唯一,要么使所有可变字符串参数具有相同的名称


请注意,还有一个
扩展
选项可能对您的情况很有用。

如果您想返回字符串,请执行该操作。@JoachimPileborg:我无法控制该函数,也无法包装它。现在它会把太多事情搞砸。你能控制什么?假设
message
是一个唯一的参数名(或可以被设置为一个唯一的参数名),那么你可以创建一个类型映射,将其作为out参数处理。但这意味着要更改
.i
文件。因为字符串是不可变的,所以不能就地更改参数。所以在Python中,这会变成一个返回值。在我提供的链接的
cstring_mutable
部分中有一个示例和更多文档。
>>> make_upper("hello world")
'HELLO WORLD'