python - ctypes: printf returnerer længde, som er int i stedet for strengen

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg bruger ctypes og indlæser msvcrt.dll i Python 2.5.


>>> from ctypes import *
>>> libname = 'msvcrt.dll'
>>> libc = CDLL(libname)
>>> libc.printf("Hello World
")
12
>>>  


Hvorfor udskriver det ikke Hello World?

Bedste reference


C printf() -funktionen selv er defineret for at returnere antallet af tegn, der er trykt til udgangen. Dette er den værdi, Python modtager, når du ringer til libc.printf().


Vejledningen ctypes giver information om, hvorfor udgangen fra printf() muligvis ikke virker inden for din Python REPL (mine psykiske fejlfindingsevner viser, at du kører Windows GUI IDLE). [9]

Andre referencer 1



  Hvorfor udskriver det ikke Hello World?



Det gør i min Python (ActiveState, 2.6), når du løber fra konsollen:


>>> from ctypes import *
>>> libc = CDLL('msvcrt.dll')
>>> libc.printf("Hello world
")
Hello world
12




Andre referencer 2


For andre, der kom her og kunne ikke få dette til at fungere på Python 3.x, er årsagen til, at du skal passere en bytes streng (b 'uanset') ikke en normal python bogstavelig streng.


Så denne kode fungerer godt på min OSX High Sierra:


from ctypes import *

libc = CDLL('/usr/lib/libc.dylib')
message\_string = 'Hello world
'
libc.printf(b"Testing: hello world")

Andre referencer 3


Jeg ved ikke, hvordan ctypes virker i Windows-systemer, men da jeg brugte ubuntu-systemet, skriver jeg som dette: libc=CDLL ('libc.so.6')
Så har du noget galt med din libs?