exponenta event banner

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

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

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

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