fgetc



Автор Alexandr Ыых задал вопрос в разделе Другие языки и технологии

Почему русская буква "я" (маленькая, кодировка-1251,Windows XP) воспринимается как EOF функцией fgetc()? и получил лучший ответ

Ответ от Алекс Красс[гуру]
Нельзя проверять окончание файла функцией fgetc, это ошибка.
Для проверки окончания файла есть специальная функция feof, ей и надо пользоваться.
Алекс Красс
Просветленный
(39781)
Таблица символов ANCII не была рассчитана на другие языки, они были добавлены позже и вызывают такую вот проблему. Как написал ЗЛО, в этом случае буква "Я" имеет код, который совпадает с EOF и заменяет его. Файл является текстовым и открывается как текстовый, но вызывает проблемы. Вообще с кодировками всегда сложности.
Функция getc, в отличие от fgetc, может быть реализован, как макроподстановка. В данном случае макроподстановка может создать ситуацию, когда выполняются избыточные операции из-за указателя на поток *FILE. Поэтому лучше использовать fgetc.
Вообще макросы иногда является более предпочтительными, но не в данном случае.

Ответ от Зло[гуру]
Windows-1251 выгодно отличается от других 8‑битных кириллических кодировок (таких как CP866, KOI8-R и ISO 8859-5) наличием практически всех символов, использующихся в русской типографике для обычного текста (отсутствует только значок ударения) ; она также содержит все символы для близких к русскому языку языков: украинского, белорусского, сербского, македонского и болгарского.
Имеет два недостатка:
строчная буква «я» имеет код 0xFF (255 в десятичной системе) . Она является «виновницей» ряда неожиданных проблем в программах без поддержки чистого 8-го бита, а также (гораздо более частый случай) использующих этот код как служебный (в CP437 он обозначает «неразрывный пробел» , в Windows-1252 — ÿ, оба варианта практически не используются; число же -1, в дополнительном коде длиной 8 бит представляющееся числом 255, часто используется в программировании как специальное значение, например, индикатор конца файла EOF часто представляется значением -1).
отсутствуют символы псевдографики, имеющиеся в CP866 и KOI8 (хотя для самих Windows, для которых она предназначена, в них не было нужды, это делало несовместимость двух использовавшихся в них кодировок заметнее).

Ответ от 3 ответа[гуру]
Привет! Вот подборка тем с ответами на Ваш вопрос: Почему русская буква "я" (маленькая, кодировка-1251,Windows XP) воспринимается как EOF функцией fgetc()?
спросили в Fujitsu Leica
Хороший-ли кпк Fujitsu-Siemens Pocket LOOX C550?
Характеристики карманного компьютера Fujitsu-Siemens Pocket LOOX C550(рус)
ТИП: MS Windows
подробнее...
спросили в Fujitsu
как войти в Bios на ноутбуке Fujitsu
При запуске системы многократно жми F2 до входа в биос . Я слышал что на Fujitsu для Win8, надо
подробнее...
спросили в Железо Fujitsu
Кто производитель ноутов fujitsu ( страна)
Фирма Япония, а производят скорее всего Китай
подробнее...
Ответ от 3 ответа[гуру]
Привет! Вот еще темы с похожими вопросами:
спросили в Интернет Fujitsu
Чем PHP как FastCGI отличается от обычного php?
Есть PHP как модуль к апачу, как CGI, как Fast CGI. Как модуль апача выполняется быстрее, но и
подробнее...
спросили в Fujitsu Siemens
Кто знает что такое сопроцессор и где взять для него драйвера на ноутбук. Fujitsu Siemens AMD Turion64 x2 Amilo 2528
Нужен драйвер на чипсет для процессоров АМД, найти можно на сайте
подробнее...
спросили в Другое Fujitsu
Подскажите пожалуйста что делать дальше? Не получается заказать с Fasttech !
ПОПРОБУЙТЕ ПОСОВЕТОВАТЬСЯ СО ЗНАТОКАМИ...

FastTech.com | Форум

подробнее...
спросили в Fujitsu Siemens
где и какие необходимо скачать драйвера для fujitsu siemens amilo li 1818?
Есть в интернете одно место, где есть , в том числе и бесплатные, для самых разных операционных
подробнее...
спросили в Fujitsu
Друзья, помогите пожалуйста найти драйверы для ноута fujitsu siemens amilo d 1845
Драйвера здесь.. .
Зайди на этот сайт и проверь компьютер c помощью их фирменной утилиты . Она
подробнее...
Файловый ввод-вывод в языке Си на Википедии
Посмотрите статью на википедии про Файловый ввод-вывод в языке Си
 

Ответить на вопрос:

Имя*

E-mail:*

Текст ответа:*
Проверочный код(введите 22):*