| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Visual C++/MFC/WTL > CString to const char* |
| Автор: tilser 21.3.2009, 21:59 | ||||
Вариант 1:
Получаем: ![]() Вариант 2:
Получаем: ![]() Такая туфтень только в юникоде. В мультибайте все окей. Нужно скопировать из CString () или LPTSTR строчку в char*, целиком. Хэлп, как говорится! |
| Автор: Helmet 21.3.2009, 22:18 |
| http://msdn.microsoft.com/en-us/library/aa450989.aspx |
| Автор: tilser 21.3.2009, 23:02 | ||
| Helmet, спасибо. Правда я уже для себя нашел решение. Вот такую ф-цию написал:
|
| Автор: Rififi 22.3.2009, 00:07 |
| CStringW str1 = L"текст в юникоде"; CStringA str1 = CW2A(str1); |
| Автор: Helmet 22.3.2009, 00:32 |
| tilser, ваша функция не будет работать правильно при включенном юникоде. Вообще то она будет неправильно работать и при выключенном (т.к. нет завершающего нуля), но это другая история. Почему вы в первом случае так извращенно (причем неправильно) определяете длину строки, а во втором показываете, что умеете нормально это делать (CString::GetLength). При включенном юникоде у вас CString::GetAt вернет wchar_t, размер которого 2 байта, а вы его в однобайтовый char суете. А потом вы просто убили. Возвращаете константный указатель на выделенную память, а кто и как чистить ее будет подумали? Все же рекомендую присмотреться к стандартной WideCharToMultiByte или же, если есть возможность узать ATL в проекте, обратить внимание на пост Rififi. |
| Автор: tilser 22.3.2009, 17:51 | ||
| Helmet, спасибо за объяснение. Во что получилось:
![]() Как от этого мусора избавиться? Мне нужно точно то, что было на первом скриншоте. |
| Автор: Rififi 22.3.2009, 18:45 |
| Как от этого мусора избавиться? ты хоть раз в жизни сам мусор из дома выносил? в программировании на C++ то же самое: мусор сам не исчезает, о нём надо позаботиться. char *buff = new char[len+1](); |
| Автор: Helmet 22.3.2009, 20:10 | ||||||
Во держи 2 функции. Надеюсь все понятно будет
Использовать их следует так: 1 случай. Тебе нужно просто конвертировать Unicode строку в Ansi.
2 случай. Тебе нужно независимо от настроек получить Ansi строку.
|
| Автор: tilser 22.3.2009, 22:06 |
| Helmet, еще раз спасибо! |
| Автор: Helmet 22.3.2009, 22:12 |
| Пожалуйста Тему решенной не забываем помечать |