MISRA C:2012 Rule 21.18

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

Описание

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

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

Это правило прибывает из MISRA C®: 2 012 Поправок 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 оператор несовместим.

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

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