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

2番目の例では、次のステートメントがあります。

c_s = c_char_p()
c_s = s

ctypesモジュールはPython割り当てのルールを破ることはできません。上記の場合、2番目の割り当ては、作成されたばかりのオブジェクトからオブジェクトに名前を再バインドします。事実上、これは新しく作成されたオブジェクトを破棄し、通常のPython文字列にはプロパティがないため、コードは質問でエラーを生成します。c_sc_char_psc_char_p.value

代わりに試してください:

c_s = c_char_p()
c_s.value = s

それがあなたの期待と一致するかどうかを確認してください。

于 2009-09-08T22:44:10.843 に答える