Python3k ctypes printf使用
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
是一种危险的方法,因为它容易导致缓冲区溢出。