我正在阅读ctypes教程,我偶然发现了这个:
s = "Hello, World"
c_s = c_char_p(s)
print c_s
c_s.value = "Hi, there"
但我一直在使用这样的指针:
s = "Hello, World!"
c_s = c_char_p()
c_s = s
print c_s
c_s.value
Traceback (most recent call last):
File "<pyshell#17>", line 1, in <module>
c_s.value
AttributeError: 'str' object has no attribute 'value'
为什么当我单向执行时,我可以访问c_s.value,而当我以其他方式执行时,没有值对象?
全部谢谢!
答案 0 :(得分:3)
在你的第二个例子中,你得到了陈述:
c_s = c_char_p()
c_s = s
ctypes
模块无法破解rules of Python assignments,在上述情况下,第二个分配重新绑定刚刚创建的c_s
名称{ {1}} c_char_p
对象的对象。实际上,这会抛弃新创建的s
对象,并且您的代码会在您的问题中产生错误,因为常规Python字符串没有c_char_p
属性。
尝试改为:
.value
看看这是否符合您的期望。