我是SWIG的新手,如果我的问题有记录,请随时发布链接,我会仔细阅读。
我有一个C函数,其形式为:
int myFunc(char *output, const char *input)
我生成了Python包装器,我尝试使用:
调用此函数(在Python中)m=""
n="valid input string"
myFunc(m,n)
这只是打印(int)返回码,而m仍然是“”。我做错了什么?
谢谢!
答案 0 :(得分:1)
如果您的C函数声明如下:
int myFunc(char *myOutput, const char *myInput);
然后您可以使用以下SWIG接口语法:
%include "cstring.i"
%cstring_bounded_output(char *myOutput, 1024);
int myFunc(char *myOutput, const char *myInput);
这应该导致Python包装器函数采用单个字符串参数(myInput
)并返回整数元组(C函数的返回值)和字符串(myOutput
)。字符串的内存将由SWIG分配,长度为1024字节,在本例中。
答案 1 :(得分:0)
好的,不推荐练习(请参阅我的评论)和YMMV,但这似乎对Python 2.4有用:
#pre-allocate enough space for m
m = "\x00"*100
n = "valid input string"
myFunc(m,n)
# now m.rstrip("\x00") has what you want