MISRA C:2012 Rule 21.18

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