我试图使用ctypes将字符数组数组传递给C函数。void cfunction(char ** strings)
{
strings[1] = "bad"; //works not what I need.
strings[1][2] = 'd'; //this will segfault.
return;
}
char *input[] = {"foo","bar"};
cfunction(input);
因为我抛出的数组是静态定义的,
我刚刚更改了函数声明和输入参数,如下所示:void cfunction(char strings[2][4])
{
//strings[1] = "bad"; //not what I need.
strings[1][2] = 'd'; //what I need and now it works.
return;
}
char input[2][4] = {"foo","bar"};
cfunction(input);
现在我遇到了如何定义这个多维字符的问题
python中的数组。我原以为会这样:import os
from ctypes import *
libhello = cdll.LoadLibrary(os.getcwd() + '/libhello.so')
input = (c_char_p * 2)()
input[0] = create_string_buffer("foo")
input[1] = create_string_buffer("bar")
libhello.cfunction(input)
这给了我TypeError: incompatible types, c_char_Array_4 instance instead of c_char_p instance。如果我改成:for i in input:
i = create_string_buffer("foo")
然后我得到分割错误。另外,这看起来是构建2d数组的错误方法,因为如果我打印输入,就会看到None:print input[0]
print input[1]
# outputs None, None instead of "foo" and "foo"
我还遇到了使用#DEFINE MY_ARRAY_X 2和#DEFINE MY_ARRAY_Y 4来保持C文件中数组维度的直线性的问题,但是我不知道如何从libhello中获取这些常量,以便python在构造数据类型时可以引用它们。