exponenta event banner

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

Строковый литерал не должен назначаться объекту, если тип объекта не является «указателем на условный символ»

Описание

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

Строковый литерал не должен назначаться объекту, если тип объекта не является «указателем на условный символ».

Объяснение

Это правило запрещает назначения, допускающие изменение строкового литерала.

Попытка изменить строковый литерал может привести к неопределенному поведению. Например, некоторые реализации могут хранить строковые литералы в памяти только для чтения. Попытка изменить строковый литерал может привести к исключению или сбою.

Внедрение Polyspace

Средство проверки правил помечает назначение строковых литералов:

  • Указатели с типом данных, отличным от const char*.

  • Массивы с типом данных, отличным от const char.

Поиск неисправностей

Если вы ожидаете нарушения правила, но не видите его, обратитесь к разделу Нарушения стандартов кодирования не отображаются.

Примеры

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

char *str1 = "xxxxxx";            // Non-Compliant 
const char *str2 = "xxxxxx";      // Compliant 

void checkSystem1(char*);
void checkSystem2(const char*);

void main() {
 checkSystem1("xxxxxx");    // Non-Compliant 
 checkSystem2("xxxxxx");    // Compliant 
}

В этом примере правило не нарушается при назначении строковых литералов const char* указатели либо непосредственно, либо через копию аргументов функции. Правило нарушается только в том случае, если const квалификатор не используется.

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

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