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