MISRA C:2012 Rule 21.15

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

Описание

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

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

Это правило прибывает из MISRA C®: 2 012 Поправок 1.

Объяснение

Функции

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

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

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

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

Примеры

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

#include <stdint.h>

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: необходимый
Введенный в R2017a