Jestem zdezorientowany z tego zachowania różnych wersji Pythona i nie rozumiem, dlaczego?Różne zachowanie ctypów c_char_p?
Python 2.7.5 (default, Aug 25 2013, 00:04:04)
[GCC 4.2.1 Compatible Apple LLVM 5.0 (clang-500.0.68)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> c="hello"
>>> a=ctypes.c_char_p(c)
>>> print(a.value)
hello
Python 3.3.5 (default, Mar 11 2014, 15:08:59)
[GCC 4.2.1 Compatible Apple LLVM 5.0 (clang-500.2.79)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> c="hello"
>>> a=ctypes.c_char_p(c)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: bytes or integer address expected instead of str instance
Jeden działa, podczas gdy drugi daje mi błąd. Który jest prawidłowy ?
Jeśli oba są poprawne, w jaki sposób mogę osiągnąć to samo zachowanie, co 2.7 w 3.3.5? Chcę przekazać wskaźnik znaku do C z Pythona.
W Pythonie 3 użyj 'bytes', tj.' C = b "witaj" '. Instancja 'c_char_p' wskazuje na prywatny bufor obiektu' bytes', więc używaj tego tylko dla parametrów 'const', które nie modyfikują łańcucha. – eryksun
@eryksun Jeśli mógłbyś to dodać jako przyczynę zmiany w python3, byłbym szczęśliwy, gdyby mógł to zaakceptować. –