printf返回1,而不是“ Hello World!”。这是理想的结果。

我用谷歌搜索,并认为是由于顺序处理方式的改变。

如何修改代码以打印“ Hello World!”?

www.mail-archive.com/[email protected]/msg15119.html

import ctypes

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

最佳答案

第一个参数也必须是字节字符串:

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是一种危险的方法,因为它容易受到缓冲区溢出的影响。

关于python - python3k ctypes printf,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2636597/

10-11 22:24