Преобразование типа данных делает допустимое значение символа таким же, как и в конце файла (EOF)
Этот дефект возникает при выполнении преобразования типа данных, которое делает допустимое значение символа неотличимым от EOF (Конец файла). Bug Finder помечает дефект в одной из следующих ситуаций:
Конец файла: Вы выполняете преобразование типа данных, например, из int на char которое преобразует значение символа, отличное от EOF, в EOF.
char ch = (char)getchar()
if((int)ch == EOF)
Широкий конец файла: Вы выполняете преобразование типа данных, которое может преобразовать значение символа, отличное от WEOF, в WEOF, и затем сравнить результат с WEOF.
Тип данных char не может удерживать значение EOF это указывает конец файла. Функции, такие как getchar иметь тип возврата int для размещения EOF. Если вы преобразовываете из int на char, значения UCHAR_MAX (допустимое значение символа) и EOF преобразуется в одно и то же значение -1 и становится неотличимым друг от друга. Когда вы сравниваете результат этого преобразования с EOFсравнение может привести к ложному обнаружению EOF. Это обоснование также относится к широким значениям символов и WEOF.
Сравнение выполните с EOF или WEOF перед преобразованием.
| Группа: Программирование |
| Язык: C | C++ |
| По умолчанию: On для рукописного кода, off для сгенерированного кода |
Синтаксис командной строки: CHAR_EOF_CONFUSED |
| Влияние: Высокий |
| ИДЕНТИФИКАТОР CWE: 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