Преобразование типа данных делает допустимое символьное значение таким же, как и в End-of-File (EOF)
Этот дефект возникает при преобразовании типа данных, которое делает допустимое значение символа неотличимым от EOF (Конец файла). Функция поиска ошибок помечает дефект в одной из следующих ситуаций:
Конец файла: выполняется преобразование типа данных, например из int кому char который преобразует значение символа, отличного от EOF, в EOF.
char ch = (char)getchar()
if((int)ch == EOF)
Wide-End-of-File: выполняется преобразование типа данных, которое позволяет преобразовать значение не-WEOF широкого символа в WEOF, а затем сравнить результат с WEOF.
Тип данных char не может удерживать значение EOF указывает конец файла. Функции, такие как getchar иметь тип возврата int приспосабливать EOF. При преобразовании из int кому char, значения UCHAR_MAX (допустимое значение символа) и EOF преобразуются в одно и то же значение -1 и становятся неотличимыми друг от друга. При сравнении результата этого преобразования с EOF, сравнение может привести к ложному обнаружению EOF. Это обоснование также относится к широким символьным значениям и WEOF.
Выполнить сравнение с EOF или WEOF перед преобразованием.
| Группа: Программирование |
| Язык: C | C++ |
| По умолчанию: Вкл для рукописного кода, выкл для сгенерированного кода |
Синтаксис командной строки: CHAR_EOF_CONFUSED |
| Воздействие: Высокое |
| CWE ID: 704 |
Errno not checked | Find defects (-checkers) | Invalid use of standard library integer routine | Misuse of sign-extended character value | Returned value of a sensitive function not checked