Python 3.5 ctypes libc printf() печатает только первый байт строки Windows 7/10

Я пытаюсь следовать одному из примеров Python Grey Hat, и он отлично работает в 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)

введите описание изображения здесь

Как мне заставить его напечатать всю строку, хранящуюся в message_string переменная, используя Python 3.5 на Windows 7 или 10?

2 ответа

Решение

Получил это на работу! Необходимо добавить b в объявлении переменной тоже. Такая маленькая деталь тоже... Смотрите скорректированный код ниже:

from ctypes import * 

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

Протестировано на 64-битной Windows 7 с Python 3.5 и 64-битной Windows 10 с Python 3.4

Grey Hat Python - chapter1-printf.py - пример

Команда должна быть msvcrt.printf("Testing: %s\n" % message_string) - у вас есть запятая вместо % условное обозначение

Другие вопросы по тегам