Правило 21.18 MISRA C:2012

Аргумент size_t, переданный любой функции в <string.h>, должен иметь соответствующее значение

Описание

Управляйте определением

Аргумент size_t, переданный любой функции в <string.h>, должен иметь соответствующее значение.

Объяснение

Значение должно быть положительным и не больше, чем размер самого маленького объекта, переданного указателем на функцию. Например, предположите, что вы используете функцию strncmp, чтобы сравнить две строки lhs_string и rhs_string можно следующим образом:

strncmp (lhs_string, rhs_string, num)
Третий аргумент num должен быть положительным и не должен быть больше, чем размер lhs_string или rhs_string, какой бы ни меньше.

В противном случае использование функции может привести к доступу для чтения или доступу для записи вне границ аргумента функции.

Обменивайтесь сообщениями в отчете

Аргумент size_t, переданный любой функции в <string.h>, должен иметь соответствующее значение.

Поиск и устранение проблем

Если вы ожидаете нарушение правила, но не видите его, обратитесь к Кодированию Стандартных Нарушений, Не Отображенных.

Примеры

развернуть все

char buf1[ 5 ] = "12345";
char buf2[ 10 ] = "1234567890";

void f ( void )
{
		if ( memcmp ( buf1, buf2, 5 ) == 0 )
		{
			/* Compliant */
		}
		if ( memcmp ( buf1, buf2, 6 ) == 0 )
		{
			/* Non-compliant */	
		}
}

В этом примере первый оператор if совместим. Аргумент size_t равняется пяти, которые являются тем же самым как размер меньшей строки, buf1.

Тем же обоснованием второй оператор if несовместим.

Проверяйте информацию

Группа: Стандартные библиотеки
Категория: обязательный
Категория AGC: обязательный
Язык: C90, C99

Введенный в R2017a