Скорее всего, вы используете Unicode-версию структуры и, следовательно, передаете широкие символы в printf
.Поскольку вы используете строку формата, которая подразумевает данные char
, существует несоответствие.
Кодировка UTF-16 приводит к тому, что каждый второй байт равен 0 для символов в диапазоне ASCII, и поэтому printf
считает, чтовторой байт первых двухбайтовых символов на самом деле является нулевым терминатором.
Это проблема, которую вы получаете с printf
, которая, конечно, не имеет безопасности типов.Поскольку вы используете C ++, вероятно, стоит перейти на iostream
ввод / вывод на основе.
Однако, если вы хотите использовать текст ANSI, как вы указали в комментарии, тогда самое простое решение - использовать ANSIDEVMODEA
версия структуры и соответствующие A
версии функций API, например, EnumDisplaySettingsA
, DeviceCapabilitiesA
.