Вопрос

Я читал учебник по 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, а когда я делаю это другим способом, объекта значения нет?

Спасибо всем!

Это было полезно?

Решение

Во втором примере у вас есть утверждения:

c_s = c_char_p()
c_s = s

А ctypes модуль не может сломать правила выполнения заданий Python, а в приведенном выше случае второе присваивание пересвязывает тот c_s имя из только что созданного c_char_p возражать против s объект.По сути, это отбрасывает вновь созданный c_char_p объект, и ваш код выдает ошибку в вашем вопросе, потому что обычная строка Python не имеет .value свойство.

Вместо этого попробуйте:

c_s = c_char_p()
c_s.value = s

и посмотрите, соответствует ли это вашим ожиданиям.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top