![]() |
|
![]() ![]() ![]() |
|
tilser |
|
||||
Новичок Профиль Группа: Участник Сообщений: 33 Регистрация: 30.1.2007 Репутация: нет Всего: нет |
Вариант 1:
Получаем: ![]() Вариант 2:
Получаем: ![]() Такая туфтень только в юникоде. В мультибайте все окей. Нужно скопировать из CString () или LPTSTR строчку в char*, целиком. Хэлп, как говорится! |
||||
|
|||||
Helmet |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 30 Регистрация: 27.2.2009 Где: Someone's hea d Репутация: 1 Всего: 1 |
||||
|
||||
tilser |
|
|||
Новичок Профиль Группа: Участник Сообщений: 33 Регистрация: 30.1.2007 Репутация: нет Всего: нет |
Helmet, спасибо.
Правда я уже для себя нашел решение. Вот такую ф-цию написал:
![]() |
|||
|
||||
Rififi |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1254 Регистрация: 9.3.2008 Репутация: 2 Всего: 36 |
CStringW str1 = L"текст в юникоде";
CStringA str1 = CW2A(str1); |
|||
|
||||
Helmet |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 30 Регистрация: 27.2.2009 Где: Someone's hea d Репутация: 1 Всего: 1 |
tilser, ваша функция не будет работать правильно при включенном юникоде. Вообще то она будет неправильно работать и при выключенном (т.к. нет завершающего нуля), но это другая история.
Почему вы в первом случае так извращенно (причем неправильно) определяете длину строки, а во втором показываете, что умеете нормально это делать (CString::GetLength). При включенном юникоде у вас CString::GetAt вернет wchar_t, размер которого 2 байта, а вы его в однобайтовый char суете. А потом вы просто убили. Возвращаете константный указатель на выделенную память, а кто и как чистить ее будет подумали? Все же рекомендую присмотреться к стандартной WideCharToMultiByte или же, если есть возможность узать ATL в проекте, обратить внимание на пост Rififi. |
|||
|
||||
tilser |
|
|||
Новичок Профиль Группа: Участник Сообщений: 33 Регистрация: 30.1.2007 Репутация: нет Всего: нет |
Helmet, спасибо за объяснение.
Во что получилось:
![]() Как от этого мусора избавиться? Мне нужно точно то, что было на первом скриншоте. |
|||
|
||||
Rififi |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1254 Регистрация: 9.3.2008 Репутация: 2 Всего: 36 |
Как от этого мусора избавиться?
ты хоть раз в жизни сам мусор из дома выносил? ![]() в программировании на C++ то же самое: мусор сам не исчезает, о нём надо позаботиться. char *buff = new char[len+1](); |
|||
|
||||
Helmet |
|
||||||
![]() Новичок Профиль Группа: Участник Сообщений: 30 Регистрация: 27.2.2009 Где: Someone's hea d Репутация: 1 Всего: 1 |
Во держи 2 функции. Надеюсь все понятно будет
Использовать их следует так: 1 случай. Тебе нужно просто конвертировать Unicode строку в Ansi.
2 случай. Тебе нужно независимо от настроек получить Ansi строку.
|
||||||
|
|||||||
tilser |
|
|||
Новичок Профиль Группа: Участник Сообщений: 33 Регистрация: 30.1.2007 Репутация: нет Всего: нет |
Helmet, еще раз спасибо!
![]() |
|||
|
||||
Helmet |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 30 Регистрация: 27.2.2009 Где: Someone's hea d Репутация: 1 Всего: 1 |
Пожалуйста
![]() Тему решенной не забываем помечать ![]() |
|||
|
||||
![]() ![]() ![]() |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |