Python 3.5 ctypes libc printf() 只打印字符串 Windows 7/10 的第一个字节

Chr*_*ris 3 c python windows pydev

我正在尝试遵循 Gray Hat Python 示例之一,它在 Python 2.7 中运行良好,但在 Python 3.5 中结果被截断。

from ctypes import * 

msvcrt = cdll.msvcrt
message_string = "Hello World!\n"
msvcrt.printf("Testing: %s\n", message_string)
Run Code Online (Sandbox Code Playgroud)

您可以看到上面代码的输出下面只是字母T

在此处输入图片说明

基于与此类似的其他一些帖子,b在最后一行添加 a 有帮助,但随后message_string被截断。

from ctypes import * 

msvcrt = cdll.msvcrt
message_string = "Hello World!\n"
msvcrt.printf(b"Testing: %s\n", message_string)
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

如何message_string在 Windows 7 或 10 上使用 Python 3.5打印存储在变量中的整个字符串?

Chr*_*ris 6

得到它的工作!也需要b在变量声明中添加。这么小的细节也......请参阅下面的调整代码:

from ctypes import * 

msvcrt = CDLL('msvcrt')
message_string = b"Hello World!\n"
msvcrt.printf(b"Testing: %s\n", message_string)
Run Code Online (Sandbox Code Playgroud)

在 Windows 7 64 位(带 Python 3.5)和 Windows 10 64 位(带 Python 3.4)上测试

在此处输入图片说明

灰帽 Python - Chapter1-printf.py - 示例