![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
En_t_end |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2074 Регистрация: 4.12.2004 Репутация: 1 Всего: 20 |
Очень удивило
![]() Смотрим... WIN32_FIND_DATA::CFileName - имеет тип WCHAR. Этот же тип "родом" от WORD. Который в свою очередь является потомком от ещё одного typedef unsigned short WORD; Интересно как это по сути строка может храниться в переменной такого типа ? Нет... нет это понятно что char - это по сути тот же int, только в границах символов. Но как строка может храниться не в массиве int или скажем short ? Почему CFileName именно WCHAR, a не допустим указатель на массив WCHAR ? И самое странное, что допустим cout спокойно воспринимает его, а вот lstrcat или strcat не хотят даже при явном преобразовании типов. PS в голову приходят самые разные мысли... может этот член хранит номер файла в Файловой Системе ? Хм... но тогда откуда cout научился использовать это... ведь iostream никакого отношения к обращению с ФС не имеет. |
|||
|
||||
En_t_end |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2074 Регистрация: 4.12.2004 Репутация: 1 Всего: 20 |
MSDN:
16-bit Unicode character. Но все же... |
|||
|
||||
Adil' |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 311 Регистрация: 26.8.2004 Где: Питер Репутация: 6 Всего: 15 |
Ну, вообще-то, WIN32_FIND_DATA::cFileName определен как TCHAR[MAX_PATH] - т.е. массив, а вот TCHAR - определяется как WCHAR, если "UNICODE defined" - т.е. объектник собирается c поддержкой unicode, иначе TCHAR - это обычный CHAR.
-------------------- Удачи |
|||
|
||||
_hunter |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 8564 Регистрация: 24.6.2003 Где: Europe::Ukraine:: Kiev Репутация: 16 Всего: 98 |
может всетаки WCHAR*?
-------------------- Tempora mutantur, et nos mutamur in illis... |
|||
|
||||
En_t_end |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2074 Регистрация: 4.12.2004 Репутация: 1 Всего: 20 |
Тогда как мне добавить данные в char[] из WIN32_FIND_DATA::CFileName путем приминения lstrcat ?
Добавлено @ 14:42 Примного извиняюсь. Ошибка была не в этом. А в строчке кода выше lstrcat. Думаю дальше обсуждать не нужно. |
|||
|
||||
не могу войти |
|
|||
Unregistered |
А как переменую типа WCHAR привести к типу CHAR? Т.е. переменной CHAR присвоить значение переменой WCHAR?
|
|||
|
||||
Adil' |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 311 Регистрация: 26.8.2004 Где: Питер Репутация: 6 Всего: 15 |
Ну, вообще-то это не так просто. Смотри ф-цию WinAPI WideCharToMultiByte - если у тебя винды. Первый параметр флаг зависит от кодировки WCHAR, а в качестве строк можно передать адреса WCHAR и CHAR, указав длины как 1.
-------------------- Удачи |
|||
|
||||
Leksey |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 332 Регистрация: 12.12.2004 Репутация: нет Всего: 1 |
А чтобы попроще есть С функция wctomb у нее параметров раза в два меньше.
|
|||
|
||||
JoyEx |
|
||||
![]() Дядя ![]() ![]() Профиль Группа: Участник Сообщений: 323 Регистрация: 21.6.2005 Где: Москва, РФ Репутация: нет Всего: 12 |
En_t_end В массиве, WCHAR определяет тип эл-тов массива, а имя массива - это указатель на первый эл-т. WCHAR = WORD = возведи 2 в степень 16 (слово = 2 байта = 16 бит) и увидишь, что хватит на все символы всех языков мира.
cFileName - это же массив!!! -------------------- Если ты уже никого не боишься, значит ты самый страшный |
||||
|
|||||
avek |
|
|||
Unregistered |
Вообще-то в Unicode последних версий линейки 3.x определено порядка 150_000 символов... Так что 2 в степени 16 там не хватит
![]() |
|||
|
||||
Adil' |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 311 Регистрация: 26.8.2004 Где: Питер Репутация: 6 Всего: 15 |
P.S. Китайских иероглифов всего то ~40 тысяч. -------------------- Удачи |
|||
|
||||
Mayk |
|
||||
![]() ^аВаТаР^ сообщение>> ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2616 Регистрация: 22.5.2005 Где: за границей разум а Репутация: 45 Всего: 134 |
Ээээ. unicode.org - не залазя в гугл угадал с первого раза. Да и UTF-32 не так уж неизвестен. Но подробнее смотрим http://www.unicode.org/versions/bookmarks.html - параграф 2.5. Вот там про 32 битное представление написано. -------------------- Здесь был кролик. Но его убили. Человеки < кроликов, йа считаю. |
||||
|
|||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |