1

我正在阅读 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,而当我用另一种方法做时,没有值对象?

谢谢大家!

4

1 回答 1

3

在您的第二个示例中,您有以下语句:

c_s = c_char_p()
c_s = s

ctypes模块不能破坏Python 赋值的规则,在上述情况下,第二个赋值将名称从刚刚创建的对象重新绑定到对象。实际上,这会丢弃新创建的对象,并且您的代码会在您的问题中产生错误,因为常规 Python 字符串没有属性。c_sc_char_psc_char_p.value

请尝试:

c_s = c_char_p()
c_s.value = s

看看这是否符合您的期望。

于 2009-09-08T22:44:10.843 回答