Python3k ctypes printf使用

2 投票
1 回答
3033 浏览
提问于 2025-04-15 21:35

printf 返回的是 1,而不是我们想要的 "Hello World!"。

我在网上查了一下,觉得这可能是因为序列处理方式的变化。

我该怎么改代码才能打印出 "Hello World!" 呢?

www.mail-archive.com/python-3000@python.org/msg15119.html

import ctypes

msvcrt=ctypes.cdll.msvcrt
string=b"Hello World!"
msvcrt.printf("%s", string)

1 个回答

4

第一个参数也需要是一个字节字符串:

msvcrt.printf(b"%s", string)

printf的返回值是打印的字符数量,在这个例子中应该是12个字符。

补充:

如果你想要返回字符串而不是直接打印,可以使用sprintf。不过这样做很危险,不推荐使用。

s = ctypes.create_string_buffer(100)   #must be large enough!!
msvcrt.sprintf(s, b'%s', b'Hello World!')
val = s.value

不过我不太明白你为什么想这么做,因为Python本身就有字符串格式化的功能。sprintf是一种危险的方法,因为它容易导致缓冲区溢出。

撰写回答