SWIG-将C字符串数组包装到python列表

SWIG-将C字符串数组包装到python列表,python,c,swig,Python,C,Swig,我想知道使用SWIG将C中的字符串数组包装到Python列表中的正确方法是什么 数组位于结构中: typedef struct { char** my_array; char* some_string; }Foo; SWIG会自动将某些\u字符串包装为python字符串 我应该在SWIG接口文件中放入什么内容,以便在Python中以常规Python字符串列表['string1'、'string2']的形式访问我的数组 我使用了所建议的typemap: %typemap(pytho

我想知道使用SWIG将C中的字符串数组包装到Python列表中的正确方法是什么

数组位于结构中:

typedef struct {
   char** my_array;
   char* some_string; 
}Foo;
SWIG会自动将某些\u字符串包装为python字符串

我应该在SWIG接口文件中放入什么内容,以便在Python中以常规Python字符串列表['string1'、'string2']的形式访问我的数组

我使用了所建议的typemap:

%typemap(python,out) char** {
  int len,i;
  len = 0;
  while ($1[len]) len++;
  $result = PyList_New(len);
  for (i = 0; i < len; i++) {
    PyList_SetItem($result,i,PyString_FromString($1[i]));
  }
}
%typemap(python,out)字符**{
内伦,我;
len=0;
而($1[len])len++;
$result=PyList_New(len);
对于(i=0;i
但这仍然不起作用。在Python中,my_数组变量显示为SwigPyObject:_20afba0100000000_p_p_char

我想知道这是否是因为字符**在结构中?也许我需要通知斯威格


有什么想法吗?

我很抱歉有点离题,但如果这是您的选择,我强烈建议您使用ctypes而不是swig。下面是我之前在ctypes上下文中提出的一个相关问题:

我认为没有一个选项可以在SWIG中自动处理此转换。您需要手动使用SWIG的类型映射功能和写入类型转换器。在这里,您可以找到从Python列表到字符**的转换,这样就完成了一半的工作。您现在需要做的是检查Typemap的其余文档,并编写从char**到Python列表的转换器。

我不是这方面的专家,但我认为:

%typemap(python,out) char** {
应用于返回字符**的函数。您的字符**位于结构中。。查看swig生成的代码,以确认是否应用了映射

您可能需要使用以下内容:

%typemap(python,out) struct Foo {
要使映射在返回的结构Foo上工作

背景:我使用了与您使用的相同的typemap定义,但是成功地使用了字符**