这是Multi-dimensional char array (array of strings) in python ctypes的后续内容。我有一个c函数来操作一个字符串数组。数据类型是静态的,因此这有助于:
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函数;它不会//看到//第二个数组值,但写入内存中的位置不会导致段错误。
声明的单词对象有些奇怪:
为什么一个对象声明为1024个字符长,给出了截断的sizeof和raw值?
答案 0 :(得分:5)
我认为您需要将单词定义为:
words = ((c_char * 1024) * 8)()
这是一个长度为8的字符串长度为1024的数组。