Python3k ctypes printf - PullRequest
       16

Python3k ctypes printf

0 голосов
/ 14 апреля 2010

printf возвращает 1 вместо "Hello World!" что является желаемым результатом.

Я гуглил это и думаю, что это из-за изменений в способах обработки последовательностей.

Как мне изменить код для вывода "Hello World!"?

www.mail-archive.com/python-3000@python.org/msg15119.html

import ctypes

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

1 Ответ

3 голосов
/ 14 апреля 2010

Первый аргумент также должен быть байтовой строкой:

msvcrt.printf(b"%s", string)

Возвращаемое значение printf - это количество напечатанных символов, которое в этом случае должно быть 12.

Edit:

Если вы хотите, чтобы строка выводилась вместо печати, вы можете использовать sprintf. Это опасно и НЕ рекомендуется.

s = ctypes.create_string_buffer(100)   #must be large enough!!
msvcrt.sprintf(s, b'%s', b'Hello World!')
val = s.value

Я не знаю, почему вы хотите это сделать, поскольку в Python есть собственное форматирование строк. sprintf - опасный метод, поскольку он подвержен переполнению буфера.

...