在python ctypes中传递字符串数组作为参数
问题描述:
这是Multi-dimensional char array (array of strings) in python ctypes的后续处理。我有一个c函数来处理一个字符串数组。数据类型是静态的,所以这会有所帮助:在python ctypes中传递字符串数组作为参数
void cfunction(char strings[8][1024])
{
printf("string0 = %s\nstring1 = %s\n",strings[0],strings[1]);
strings[0][2] = 'd'; //this is just some dumb modification
strings[1][2] = 'd';
return;
}
我在Python创建的数据类型和使用它像这样:
words = ((c_char * 8) * 1024)()
words[0].value = "foo"
words[1].value = "bar"
libhello.cfunction(words)
print words[0].value
print words[1].value
输出看起来是这样的:
string0 = fod
string1 =
fod
bar
它看起来像我不正确地将单词对象传递给我的C函数;它不//看到/ /第二个数组值,但写入内存中的位置不会导致段错误。
别的东西奇数有关声明的话对象:
- 字[0]。价值= FOO
- LEN(字[0]。价值)= 3
- 的sizeof(字[0] )= 8
- 再版(字[0] .RAW)= '富\ X00 \ X00 \ X00 \ X00 \ X00'
为什么一个对象声明为1024个字符长给截短的sizeof和原始值?
答
我认为你需要定义的话为:
words = ((c_char * 1024) * 8)()
这将是长度的字符串1024
是啊这是正确的长度为8的数组...哇哦,我吸。 – user17925 2010-11-11 19:29:40