create_string_buffer
Python的string是不可修改的,所以不能传递string
到一个 C/C++函数去改变它的内容,所以需要使用create_string_buffer
再python里通过ctypes给指针类型的对象c_char_p
,c_wchar_p
和c_void_p
等赋值时,将改变它们所指向的内存地址,这和c/c++大不相同,c/c++是修改它们所指向的内存区域的内容,这是因为python的byte对象是不可以修改的.如果你需要可改变的内存块,ctypes
提供了 create_string_buffer()
函数,它提供多种方式创建这种内存块.当前的内存块内容可以通过raw
属性存取,如果你希望将它作为NUL
结束的字符串,请使用value
属性
>>> from ctypes import *
>>> p = create_string_buffer(3) # create a 3 byte buffer, initialized to NUL bytes
>>> print(sizeof(p), repr(p.raw))
3 b'\x00\x00\x00'
>>> p = create_string_buffer(b"Hello") # create a buffer containing a NUL terminated string
>>> print(sizeof(p), repr(p.raw))
6 b&#