2009-09-08 112 views
1

我读ctypes的教程,我碰到这个传来: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,而当我以另一种方式执行操作时,没有值对象?

谢谢大家!

回答

3

在你的第二个例子,你有陈述:

c_s = c_char_p() 
c_s = s 

的​​模块不能打破rules of Python assignments,并在上述情况下,第二分配从刚刚重新绑定c_s名创建的c_char_p对象为s对象。实际上,这会抛弃新创建的c_char_p对象,并且您的代码会在您的问题中产生错误,因为常规Python字符串不具有.value属性。

尝试,而不是:

c_s = c_char_p() 
c_s.value = s 

,看看是否与你的期望一致。

+0

哦。哇,这是一个伟大的基本答案。谢谢! – trayres 2009-09-11 04:40:47