вопрос с указателем ctypes
-
22-09-2019 - |
Вопрос
Я читал учебник по 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
и посмотрите, соответствует ли это вашим ожиданиям.
Не связан с StackOverflow