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

Аргументы указателя к Стандартным Библиотечным функциям memcpy, memmove и memcmp должны быть указателями на квалифицированные или неполные версии совместимых типов

Описание

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

Аргументы указателя к Стандартным Библиотечным функциям memcpy, memmove и memcmp должны быть указателями на квалифицированные или неполные версии совместимых типов.

Объяснение

Функции

memcpy( arg1, arg2, num_bytes );
memmove( arg1, arg2, num_bytes );
memcmp( arg1, arg2, num_bytes );
выполните копию байта байтом, перемещение или сравнение между ячейками памяти, на которые указывают arg1 и arg2. Копия байта байтом, перемещение или сравнение значимы, только если arg1 и arg2 имеют совместимые типы.

Используя указатели на различные типы данных для arg1 и arg2 обычно указывает на ошибку кодирования.

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

Аргументы указателя к Стандартным Библиотечным функциям memcpy, memmove и memcmp должны быть указателями на квалифицированные или неполные версии совместимых типов.

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

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

Примеры

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

void f ( uint8_t s1[ 8 ], uint16_t s2[ 8 ] )
{
	( void ) memcpy ( s1, s2, 8 ); /* Non-compliant */
}

В этом примере s1 и s2 являются указателями на различные типы данных. Оператор memcpy копирует восемь байтов от одного буфера до другого.

Восемь байтов представляют целый промежуток буфера, на который указывает s1, но только часть буфера, на который указывает s2. Поэтому оператор memcpy копирует только часть s2 к s1, который может быть непреднамеренным.

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

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

Введенный в R2017a