在python ctypes中传递字符串数组作为参数

时间:2010-11-11 16:58:21

标签: python pointers ctypes

这是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函数;它不会//看到//第二个数组值,但写入内存中的位置不会导致段错误。

声明的单词对象有些奇怪:

  • words [0] .value = foo
  • len(words [0] .value)= 3
  • sizeof(words [0])= 8
  • repr(words [0] .raw)='foo \ x00 \ x00 \ x00 \ x00 \ x00'

为什么一个对象声明为1024个字符长,给出了截断的sizeof和raw值?

1 个答案:

答案 0 :(得分:5)

我认为您需要将单词定义为:

words = ((c_char * 1024) * 8)()

这是一个长度为8的字符串长度为1024的数组。