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

问题描述 投票:0回答:4

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

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

为什么不打印

Hello World

python windows ctypes
4个回答
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()
函数本身定义为返回打印到输出的字符数。这是您调用
libc.printf()
.

时 Python 收到的值

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


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")

-1
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.