定义c_char Python的数组长度

时间:2015-02-01 23:10:04

标签: python c compilation header ctypes

在C头文件中我有:

long param_API test(    
                        ___OUT_ char Text[41]
                      )

在Python代码中导入ctypes后,我正在调用test

out_char = (ctypes.c_char)()
def getRes():
    result = lib.test(out_char)
    return result

但我在日志文件中收到此错误:

output parameter is NULL

我猜测试功能没有足够的空间来写入输出。我在这里做错了什么?如何设置out_char的长度?

1 个答案:

答案 0 :(得分:0)

要创建数组,请使用:

out_char = (ctypes.c_char * 41)()

这将创建一个数组对象的实例:

>>> (ctypes.c_char*41)()
<__main__.c_char_Array_41 object at 0x0000000002891048>

您可以访问各个元素:

>>> out_char[0]
b'\x00'
>>> out_char[40]
b'\x00'
>>> out_char[41]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: invalid index

c_char的情况下,整个缓冲区:

>>> out_char.raw
b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x
00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'

或者只是以零结尾的部分:

>>> out_char.value
b''