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

Строковый литерал не должен быть присвоен объекту, если тип объекта не будет “указателем на квалифицированный к const char”

Описание

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

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

Объяснение

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

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

Обменивайтесь сообщениями в отчете

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

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

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

Примеры

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

char *str1 = "AccountHolderName";
const char *str2 = "AccountHolderName";

void checkAccount1(char*);              /* Non-Compliant */
void checkAccount2(const char*);        /* Compliant */

void main() {
 checkAccount1("AccountHolderName");    /* Non-Compliant */
 checkAccount2("AccountHolderName");    /* Compliant */
}

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

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

Группа: литералы и константы
Категория: необходимый
Категория AGC: необходимый
Язык: C90, C99

Введенный в R2014b