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

Ваш аккаунт

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

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

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

Конвертирование из Char* в LPWSTR

7.8K
06 апреля 2007 года
simplemortal
62 / / 09.02.2007
Привет всем!
У меня небольшая проблемка с конвертированием строк из char* в LPWSTR.
Есть такая функция:

 
Код:
//Конвертирование из Char* в LPWSTR
LPWSTR CharToLPWSTR(LPCSTR char_string)
{
    LPWSTR res;
    DWORD res_len = MultiByteToWideChar(1251, 0, char_string, -1, NULL, 0);
    res = (LPWSTR)GlobalAlloc(GPTR, res_len);
    MultiByteToWideChar(1251, 0, char_string, -1, res, res_len);
    return res;
}

Но проблема заключается в том, что если конвертируемая строка длиннее, по-моему, 10 символов, то возникает исключение. Что-то я сам не разобрался, почему длина конвертируемой строки так сильно ограничена.
В крайнем случае, конечно, можно конвертируемую строку разбивать на куски по 10 символов, а потом склеивать результаты конвертирования. Но я думаю, это будет на самый оптимальный вариант. Хотелось бы узнать мнение общественности по этому вопросу.
1.8K
06 апреля 2007 года
_const_
229 / / 26.11.2003
В GlobalAlloc 2-й параметр:
Number of bytes to allocate.
А у тебя res_len - длина в символах. Да еще забыл место под конечный NULL.
В результате:
res = (LPWSTR)GlobalAlloc(GPTR, (res_len + 1) * sizeof(WCHAR));
26K
06 апреля 2007 года
Atomic
8 / / 06.04.2007
Security Alert
Using the MultiByteToWideChar function incorrectly can compromise the security of your application. Calling the MultiByteToWideChar function can easily cause a buffer overrun because the size of the In buffer equals the number of bytes in the string, while the size of the Out buffer equals the number of WCHARS. To avoid a buffer overrun, be sure to specify a buffer size appropriate for the data type the buffer receives. For more information, see Security Considerations: International Features.

длина WCHAR больше 1 байта. Ты выделяешь маленький буффер.Выделяй с учетом размера WCHAR. Все-ж написано в MSDN :)
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог