exponenta event banner

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

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

Описание

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

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

По тем же рассуждениям, второй if оператор несовместим.

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

Группа: Стандартные библиотеки
Категория: Обязательно
Категория СМЖЛ: обязательная
Представлен в R2017a