MISRA C:2012 Rule 21.18

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

Описание

Определение правила

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

Это правило получено от MISRA C®: 2012 1 о внесении изменений.

Объяснение

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

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

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

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

Если вы ожидаете нарушения правил, но не видите его, обратитесь к разделу «Стандартные нарушения кодирования не отображаются».

Примеры

расширить все

#include <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 оператор совместим. The size_t аргумент равен пяти, что совпадает с размером меньшей строки, buf1.

По тем же причинам второй if оператор не совместим.

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

Группа: Стандартные библиотеки
Категория: Обязательная
Категория AGC: Обязательно
Введенный в R2017a