Author Alex Wang
Recipients Alex Wang
Date 2016-11-15.17:23:55
SpamBayes Score -1.0
Marked as misclassified Yes
Message-id <1479230636.43.0.863548306007.issue28698@psf.upfronthosting.co.za>
In-reply-to
Content
- Python Version

Python 3.5.2

- Issue

I found that the c_wchar_p and c_char_p return results behaves different from what it is based on ctypes doc. From the ctypes doc of Python 3.5:

>>> c_wchar_p("Hello, World")
c_wchar_p('Hello, World')

It return the ctypes string. But my results of execute the same cmd in Python3.5 console:

>>> from ctypes import *
>>> c_wchar_p("Hello, World")
c_wchar_p(1374004842736)
>>> c_wchar_p("Hello, World")
c_wchar_p(1374004841680)
>>> c_wchar_p("Hello, World")
c_wchar_p(1374004842736)

So seems like the orignial string part replaced by memory address. Digged in more, and found out if it is Python 2.x, then the return shows the string like the Python 3.5 ctypes doc shows. But in Python 3.x, it always return these numbers. Checked on multiple PCs, all seen the same thing. And understood the part that, we can use .value to return the original string. Same thing observed on create_string_buffer() and create_unicode_buffer(). Meanwhile, for other data types like c_int(), c_bool, c_void_p etc., not see this.

- Question

Can anyone provide a explaination about this behavior of ctypes?
And is there any way to fix the Python3.x return resuls as the same as what is doc wrote? (It seems that when it behave like this, I had issue with passing Python string to C function, when I interact with a C DLL.)

- Repro

This can be reproduce in python.org/shell easily.

Thanks a lot in advance~
History
Date User Action Args
2016-11-15 17:23:56Alex Wangsetrecipients: + Alex Wang
2016-11-15 17:23:56Alex Wangsetmessageid: <1479230636.43.0.863548306007.issue28698@psf.upfronthosting.co.za>
2016-11-15 17:23:56Alex Wanglinkissue28698 messages
2016-11-15 17:23:55Alex Wangcreate