ctypes: printf返回的是int类型的长度而不是字符串
我在用ctypes这个库,并且在Python 2.5里加载了msvcrt.dll这个文件。
>>> from ctypes import *
>>> libname = 'msvcrt.dll'
>>> libc = CDLL(libname)
>>> libc.printf("Hello World\n")
12
>>>
为什么它不打印出Hello World
呢?
4 个回答
1
对于那些来到这里却在Python 3.x上无法让这个工作的人,原因是你必须传递一个字节字符串(b"whatever"),而不是普通的Python字符串。
所以这段代码在我的OSX High Sierra上运行得很好:
from ctypes import *
libc = CDLL('/usr/lib/libc.dylib')
libc.printf(b"Testing: hello world")
4
为什么它不打印“Hello World”?
在我的Python(ActiveState,2.6)中,从控制台运行时是可以打印的:
>>> from ctypes import *
>>> libc = CDLL('msvcrt.dll')
>>> libc.printf("Hello world\n")
Hello world
12
(来源:typepad.com)
3
C语言中的 printf()
函数是用来输出内容的,它会返回输出的字符数量。这就是当你在Python中调用 libc.printf()
时,Python所接收到的值。
ctypes
教程 提供了关于为什么 printf()
的输出在你的Python REPL(我猜测你是在使用Windows的GUI IDLE)中可能无法正常工作的原因。