MISRA C:2012 Rule 7.4

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

Описание

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

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

Объяснение

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

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

Реализация 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 классификатор не используется.

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

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