DISPLAY_DEVICE dispDevice;
memset((void *)&dispDevice, 0, sizeof(DISPLAY_DEVICE);
dispDevice.cb = sizeof(DISPLAY_DEVICE);
EnumDisplayDevices(NULL, 0, &dispDevice, 0);
printf("%s\n", dispDevice.DeviceName);
Вывод результата EnumDisplayDevices
Есть код:
Код:
printf() почему-то выводит только первый символ из dispDevice.DeviceName. Соответственно, strlen(dispDevice.DeviceName) я получаю равным 1. Однако если я пишу вот так:
Код:
for (int i = 0; *(dispDevice.DeviceName+i); i++)
printf("%c", dispDevice.DeviceName);
printf("%c", dispDevice.DeviceName);
- получаю абсолютно нормальную строку. В чем подвох, кто как думает?
Код:
printf("%s\n", &dispDevice.DeviceName);
Что касается второго замечания - здесь вы несколько неправы, потому что dispDevice.DeviceName объявлен как TCHAR DeviceName[32] (http://msdn.microsoft.com/en-us/library/dd183569(v=vs.85).aspx), а в C/C++ имя массива равносильно указателю на его первый элемент. Если вы имели в виду
Код:
printf("%s\n", &dispDevice.DeviceName[0]);
- то пробовал писать и так, эффект тот же.
Всем спасибо, вопрос снят. :) Как выяснилось, поля структуры DISPLAY_DEVICE на самом деле массивы из wchar_t. Соответственно, при попытке распечатать их функцией printf() получалась наблюдаемая ерунда.