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

我试图遵循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) 

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

在这里输入图像说明

基于一个类似于这个一些其他职位,添加一个b到最后一行有帮助,但然后message_string被截断。

 from ctypes import * msvcrt = cdll.msvcrt message_string = "Hello World!\n" msvcrt.printf(b"Testing: %s\n", message_string) 

在这里输入图像说明

如何使用Windows 7或10上的Python 3.5打印存储在message_stringvariables中的整个string?

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

 from ctypes import * msvcrt = CDLL('msvcrt') message_string = b"Hello World!\n" msvcrt.printf(b"Testing: %s\n", message_string) 

在Windows 7 64bit,w / Python 3.5和Windows 10 64bit w / Python 3.4上测试

在这里输入图像说明

灰帽子Python – chapter1-printf.py – 例子

该命令应该是msvcrt.printf("Testing: %s\n" % message_string) – 用逗号代替%符号