我正在尝试将字符串(sys.argv)列表传递给c库。 在python2.x中,它的工作方式如下:
lib = cdll.LoadLibrary("./libfoo.so")
arr = (c_char_p * (len(sys.argv) + 1))(*sys.argv)
arr[ len(sys.argv) ] = None
lib.foo_main(byref(arr))
但在python3中,它不起作用,它说:
TypeError: bytes or integer address expected instead of str instance
所以,我这样解决了:
arr = (c_char_p * (len(sys.argv) + 1))()
idx = 0
for arg in sys.argv:
arr[idx] = bytes(str(arg), 'ascii')
idx += 1
arr[ len(sys.argv) ] = None
但我认为这是一个肮脏的解决方法。我想知道更优雅的方法。 有人能帮帮我吗?