Python'un farklı sürümlerindeki bu davranışla kafam karıştı ve neden anlamadım?Farklı ktypes davranışı 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
Biri diğeri bana bir hata verirken çalışır. Hangisi doğru ?
Her ikisi de doğruysa, 3.3.5'te 2.7 ile aynı davranışı nasıl başarabilirim? Ben char işaretçisini python'dan C'ye geçmek istiyorum.
Python 3'te 'bytes' kullanın, yani c = b" merhaba "'. 'C_char_p' örneği, 'bytes' nesnesinin özel arabelleğini işaret eder, bu nedenle yalnızca dizeyi değiştirmeyecek" const "parametreleri için kullanın. – eryksun
@eryksun Bunu python3'te neden değiştiğine dair bir cevap olarak ekleyebilirseniz, bunu kabul etmekten mutluluk duyarım. –