2010-11-11 113 views
1

这是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和原始值?

回答

5

我认为你需要定义的话为:

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

这将是长度的字符串1024

+0

是啊这是正确的长度为8的数组...哇哦,我吸。 – user17925 2010-11-11 19:29:40

相关问题