Сейчас на форуме: 2nd, morgot, Rio, CDK123, zds, tyns777, tihiy_grom (+4 невидимых)

 eXeL@B —› Программирование —› IntToHex VC++ (unicode)
Посл.ответ Сообщение

Ранг: 39.0 (посетитель)
Активность: 0.040
Статус: Участник

Создано: 21 марта 2009 20:03 · Поправил: SVIN95
· Личное сообщение · #1

Пытаюсь создать функцию IntToHex (как в билдере). Два пареметра - само число и кол-во знаков (до 8). Возвращает значение типа LPCWSTR (строка в юникоде). Привожу упрощенный вариант функции (без возможности задать кол-во символов)

Code:
  1. LPCWSTR IntToHex(int i)
  2. {
  3.     wchar_t WResult[8];
  4.     wsprintf(WResult, L"%08X", i);
  5.     LPCWSTR Result = WResult;
  6.          
  7.     return (Result);
  8. }


Получаю сообщение об ошибке - "Run-Time Check Failure #2 - Stack around the variable 'WResult' was corrupted.".
Уже долго мучаюсь. С функцией, в которой есть возможность задавать количество знаков тоже самое. Уже пробовал сначала поставить ZeroMemory(&WResult, sizeof(WResult)). Не помогает. В чем дело?

P.S. _itow не предлагать. Нет возможности задать маску.

ADDED: значение переменной Result нормальное. Значит преобразовывается нормально. Но почему-то ошибка при выполнении return (Result);



Ранг: 39.6 (посетитель)
Активность: 0.020
Статус: Участник

Создано: 21 марта 2009 20:49 · Поправил: NetSpider
· Личное сообщение · #2

Может я чего то непонимаю. Не маловато ли 8 символов для WResult? Поставьте wchar_t WResult[256]; Крашиться не должно. Или уж, если 256 дико, то можно 64.

P.S. Только что проверил. Дело действительно в этом. С wchar_t WResult[10]; работало нормально

P.S.S А падает прога скорее всего из-за того, что память для строки выделяется из стека. Функция wsprintf при преобразовании возможно затирает, то что ей не положено.



Ранг: 39.0 (посетитель)
Активность: 0.040
Статус: Участник

Создано: 21 марта 2009 21:26 · Поправил: SVIN95
· Личное сообщение · #3

Все, проблему решил. NetSpider, спасибо. Только пришлось заменить wchar_t WResult[10] на wchar_t * WResult = new wchar_t[10];
Тему закрываю.


 eXeL@B —› Программирование —› IntToHex VC++ (unicode)
Эта тема закрыта. Ответы больше не принимаются.
   Для печати Для печати