使用ctypes将字符串作为char指针数组传递

时间:2018-04-22 22:46:28

标签: python python-3.x ctypes

我有这个签名的C函数:

int fileopen(const char *fname, int flags)

在Linux系统中,我想使用fname从Python传递ctypes,因此我使用ctypes.c_char_p("file1.dat")作为以下内容:

import ctypes as ctypes

dll_name = "IO/pyaio.so"
dllabspath = os.path.dirname(os.path.abspath(__file__)) + os.path.sep + dll_name
pyaio = ctypes.CDLL(dllabspath)

fd_w = pyaio.fileopen(ctypes.c_char_p("file1.dat"), 1)

但是我收到了这个错误:

Traceback (most recent call last):
  File "test.py", line 21, in <module>
    fd_w = pyaio.fileopen(ctypes.c_char_p("file1.dat"), 1) # 0 read, 1 write
TypeError: bytes or integer address expected instead of str instance

我不知道传递字符串"file1.dat"的另一种方法,而不是使用ctypes.c_char_p。如何解决这个问题呢?

谢谢

1 个答案:

答案 0 :(得分:3)

"file1.dat"更改为b"file1.dat"(与'file1.dat'.encode('ascii')相同)。