Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Вывод результата EnumDisplayDevices

278
04 января 2011 года
Alexander92
1.1K / / 04.08.2008
Всем здравствуйте! Столкнулся с абсолютно глупой ошибкой, посмотрите, пожалуйста, в чем может быть дело?

Есть код:
 
Код:
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);


printf() почему-то выводит только первый символ из dispDevice.DeviceName. Соответственно, strlen(dispDevice.DeviceName) я получаю равным 1. Однако если я пишу вот так:

 
Код:
for (int i = 0; *(dispDevice.DeviceName+i); i++)
    printf("%c", dispDevice.DeviceName);


- получаю абсолютно нормальную строку. В чем подвох, кто как думает?
7
04 января 2011 года
@pixo $oft
3.4K / / 20.09.2006
Во-первых,какой 2й символ строки?Во-вторых,разве не адрес строки надо передавать в printf()?
 
Код:
printf("%s\n", &dispDevice.DeviceName);
то есть
278
04 января 2011 года
Alexander92
1.1K / / 04.08.2008
Второй символ строки - бэкслэш ("\\"). Хотя здесь это не принципиально, потому что я брал разные поля 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]);

- то пробовал писать и так, эффект тот же.
278
04 января 2011 года
Alexander92
1.1K / / 04.08.2008
Всем спасибо, вопрос снят. :) Как выяснилось, поля структуры DISPLAY_DEVICE на самом деле массивы из wchar_t. Соответственно, при попытке распечатать их функцией printf() получалась наблюдаемая ерунда.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог