Аргументы к обрабатывающим символ функциям должны быть представимыми как 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 |