ctypes:printf返回的长度是int而不是字符串

时间:2011-02-13 22:23:06

标签: python windows ctypes

我正在使用ctypes并在Python 2.5中加载msvcrt.dll。

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

为什么不打印Hello World

4 个答案:

答案 0 :(得分:5)

  

为什么不打印Hello World?

在我的Python(ActiveState,2.6)中,当从控制台运行时:

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

答案 1 :(得分:3)

C printf()函数本身被定义为返回打印到输出的字符数。这是Python在调用libc.printf()时收到的值。

ctypes tutorial提供了有关为什么printf()的输出可能无法在您的Python REPL中工作的信息(我的通灵调试技能表明您正在运行Windows GUI IDLE)。

答案 2 :(得分:0)

对于其他来到这里并且无法在Python 3.x上运行的人,原因是that you must pass a bytes string (b"whatever")不是常规的python文字字符串。

所以这段代码适用于我的OSX High Sierra:

from ctypes import *

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

答案 3 :(得分:-1)

我不知道ctypes在Windows系统中是如何工作的,但是当我使用ubuntu系统时,我这样写: libc = CDLL(" libc.so.6") 那么,你的libs有问题吗?