Sono confuso con questo comportamento di diverse versioni di Python e non capisco perché?Comportamento diverso dei ctyp 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
Uno funziona mentre l'altro mi dà un errore. Quale è corretto ?
Se entrambi sono corretti, come posso ottenere lo stesso comportamento di 2.7 in 3.3.5? Voglio passare il puntatore char a C da python.
In Python 3 si usano 'byte', cioè' c = b "ciao" '. L'istanza di 'c_char_p' punta al buffer privato dell'oggetto' bytes', quindi usalo solo per i parametri 'const' che non modificheranno la stringa. – eryksun
@eryksun Se potessi aggiungere che come risposta per il motivo per cui è cambiato in python3, sarei felice di accettarlo. –