MISRA C:2012 Rule 22.4

Не должно быть попытки записи в поток, который был открыт только для чтения

Описание

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

Не должно быть попытки записи в поток, который был открыт только для чтения.

Объяснение

Стандарт не задает поведение, если предпринята попытка записи в поток только для чтения.

Реализация Polyspace

Проверить наличие этого правила можно только с помощью анализа Bug Finder.

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

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

Примеры

расширить все

#include <stdio.h>

void func1(void) {
    FILE *fp1 = fopen("tmp.txt", "r");
    (void) fprintf(fp1, "Some text"); /* Non-compliant: Read-only stream */
    (void) fclose(fp1);
}

void func2(void) {
    FILE *fp2 = fopen("tmp.txt", "r+");
    (void) fprintf(fp2, "Some text"); /* Compliant */
    (void) fclose(fp2);
}

В этом примере поток файлов, сопоставленный с fp1 открыт только для чтения. Правило нарушается при написании потока.

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

Группа: Ресурсы
Категория: Обязательная
Категория AGC: Обязательно
Введенный в R2015b