抱歉,但我通常很难阅读当前的 ctypes 文档......
如果我有一个 C 函数需要const char *
指针,而我know它既不会修改传入的字符串,也不会在函数调用之外保留对它的引用,直接将指针传递给 python 字符串的字节确实很有意义。
ctypes 可以做到这一点还是只是不支持?我真的必须这样做吗create_string_buffer
并将我的字符串复制到其中?
为指针类型 c_char_p、c_wchar_p 和 c_void_p 的实例分配新值会更改它们指向的内存位置,而不是内存块的内容(当然不是,因为 Python 字符串是不可变的):
>>> s = "Hello, World"
>>> c_s = c_char_p(s)
>>> print c_s
c_char_p('Hello, World')
>>> c_s.value = "Hi, there"
>>> print c_s
c_char_p('Hi, there')
>>> print s # first string is unchanged
Hello, World
>>>
不过,您应该小心,不要
将它们传递给期望的函数
指向可变内存的指针。如果你
需要可变内存块,ctypes 有
create_string_buffer 函数
以各种方式创造这些。这
当前内存块内容可以是
使用原始数据访问(或更改)
属性,如果你想访问它
NUL 结尾的字符串,使用该字符串
财产:
ctypes 教程说。我从中得到的是,只有当该函数可以与const char*
,传入 python 字符串是否有效。请记住,它不会有空终止。
我建议使用create_string_buffer
anyhow.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)