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)
- у вас есть запятая вместо %
условное обозначение