![]() |
Модераторы: bsa |
![]() ![]() ![]() |
|
Compositum |
|
||||||
![]() Senior developer ![]() ![]() Профиль Группа: Awaiting Authorisation Сообщений: 430 Регистрация: 6.1.2008 Где: Санкт-Петербург Репутация: нет Всего: 1 |
Добрый день. В свободное время потихоньку изучаю Си (не C++, а именно C - для форматирования кода использую вариант "C++", т.к. в предлагаемом списке отсутствует вариант "C").
Код на C (стандарт C89). Показываю две версии: "английскую" и "русскую". "Английская версия":
"Английская" версия компилируется без проблем и работает. "Русская" версия:
"Русская" версия не компилируется, пишет:
Приведённая мною выше "русская" версия, взята из книги Герберта Шилдта "Полный справочник по C", 4-е издание. Там в примере так же русские символы. Об указанной мною выше проблеме ни слова не написано... Видимо переводчик перевёл, а на работоспособность код проверен не был. Что нужно сделать, чтобы заработал и "русский" вариант? Спасибо. |
||||||
|
|||||||
boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 20 Всего: 110 |
русский исходник сохрани в кодировке cp1251 или utf8
|
|||
|
||||
Compositum |
|
|||
![]() Senior developer ![]() ![]() Профиль Группа: Awaiting Authorisation Сообщений: 430 Регистрация: 6.1.2008 Где: Санкт-Петербург Репутация: нет Всего: 1 |
у меня файл и так сохранён в UTF-8. |
|||
|
||||
actuator |
|
|||
Новичок Профиль Группа: Участник Сообщений: 44 Регистрация: 15.12.2011 Репутация: нет Всего: 3 |
-Wmultichar
|
|||
|
||||
Compositum |
|
|||
![]() Senior developer ![]() ![]() Профиль Группа: Awaiting Authorisation Сообщений: 430 Регистрация: 6.1.2008 Где: Санкт-Петербург Репутация: нет Всего: 1 |
? |
|||
|
||||
actuator |
|
|||
Новичок Профиль Группа: Участник Сообщений: 44 Регистрация: 15.12.2011 Репутация: нет Всего: 3 |
GCC не будет работать с многобайтовыми строками (а UTF - многобайтовые), пока ты ему это прямо не укажешь предложенным аргументом. Пока не умеешь работать с ними, пиши такие программки в однобайтовой кодировке, которую примет твоя консоль - cp866 (win) или koi-8 (freebsd).
|
|||
|
||||
Compositum |
|
|||
![]() Senior developer ![]() ![]() Профиль Группа: Awaiting Authorisation Сообщений: 430 Регистрация: 6.1.2008 Где: Санкт-Петербург Репутация: нет Всего: 1 |
Благодарю за ответы!
Я переписал код, используя вместо char тип wctype_t (добавил нужные include, ну и имена вызывающих функций соответственно подправил). Откомпилировал с указанием опции '-w'. Компиляция прошла успешно, программка отработала. Но у меня возникли др. вопросы по теме:
Просто получается, что для того, чтобы работать с Unicode нужно постоянно заморачиваться с преобразованием char в wctype_t, т.е. по умолчанию "мама" воспринимается как массив char, а 's' - как char. А хотелось бы, чтобы было наоборот: чтобы "мама" воспринимается как массив wctype_t, а 's' - как wctype_t. Ну а при необходимости всегда можно преобразовать wctype_t в char (просто wctype_t при написании локализованных приложений используется гораздо чаще, чем char). Спасибо. Это сообщение отредактировал(а) Compositum - 26.12.2011, 09:44 |
|||
|
||||
Compositum |
|
|||
![]() Senior developer ![]() ![]() Профиль Группа: Awaiting Authorisation Сообщений: 430 Регистрация: 6.1.2008 Где: Санкт-Петербург Репутация: нет Всего: 1 |
Всё оказалось просто:
1. L"Hello World" - массив двухбайтных символов. 2. L's' - двухбайтный символ ![]() |
|||
|
||||
![]() ![]() ![]() |
Правила форума "C/C++: Для новичков" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |