MISRA C:2012 Rule 21.15

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

Описание

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

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

Это правило получено от MISRA C®: 2012 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 являются указателями на различные типы данных. The memcpy оператор копирует восемь байтов из одного буфера в другой.

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

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

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