Аргументы к обрабатывающим символ функциям должны быть представимыми как char без знака.
Аргументы к обрабатывающим символ функциям должны быть представимыми как char без знака.
Сравнение с EOF: Предположим, ваш компилятор реализует плоскость char
тип, как подписано. В этой реализации символ с десятичной формой 255 (–1 в дополнительной форме two) хранится как значение со знаком. Когда вы преобразуете char
переменная к более широкому типу данных int
например, знаковый бит сохраняется (расширение знака). Это расширение знака приводит к символу с десятичной формой 255 преобразовываемый в целое число –1, который нельзя отличить от EOF.
Использование в качестве индекса массива: подобным обоснованием вы не можете использовать расширенную знаком плоскость char
переменные как индекс массива. Если знаковый бит сохраняется, преобразование из char
к int
может привести к отрицательным целым числам. Необходимо использовать положительные целочисленные значения в индексе массива.
Аргумент к обрабатывающей символ функции: подобным обоснованием вы не можете использовать расширенную знаком плоскость char
переменные в качестве аргументов к обрабатывающим символ функциям объявляются в ctype.h
, например, isalpha()
или isdigit()
. Согласно стандарту C11 (Раздел 7.4), если вы предоставляете целочисленный аргумент, который не может быть представлен как unsigned char
или EOF, получившееся поведение не определено.
Проверка повышает флаг когда:
Вы используете недействительные аргументы с целочисленной функцией от стандартной библиотеки. Эта проверка берет:
Преобразование символов
toupper, tolower
Символьные проверки
isalnum, isalpha, iscntrl, isdigit, isgraph, islower, isprint, ispunct, isspace, isupper, isxdigit
Целочисленное деление
div, ldiv
Абсолютные значения
abs, labs
Вы преобразуете со знаком или плоскость char
тип данных к более широкому целочисленному типу данных с расширением знака. Вы затем используете получившееся расширенное знаком значение в качестве индекса массива для сравнения с EOF или в качестве аргумента к обрабатывающей символ функции.
Если вы ожидаете нарушение правила, но не видите его, обратитесь к Кодированию Стандартных Нарушений, Не Отображенных.
Группа: библиотека Strings |