Преобразование типа данных делает допустимое значение символа таким же, как и в конце файла (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