exponenta event banner

Запись в ресурс только для чтения

Файл, первоначально открытый только для чтения, изменен

Описание

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

Например, файл открывается с помощью fopen с аргументом режима доступа r. Вы записываете в этот файл с помощью функции в fprintf семья.

Риск

Запись в файл только для чтения приводит к неопределенному поведению.

Зафиксировать

Если требуется записать файл в файл, откройте его в режиме, подходящем для записи.

Примеры

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

#include <stdio.h>

void func(void) {
    FILE* fp ;

    fp = fopen("file.txt", "r");
    fprintf(fp, "Some data");
    fclose(fp);
}

В этом примере файл file.txt открывается в режиме только для чтения. Когда FILE указатель, связанный с file.txt используется в качестве аргумента fprintf, возникает дефект ресурса Writing to read-only.

Исправление - Открыть файл как доступный для записи

Одной из возможных корректировок является использование спецификатора доступа "a" вместо "r". file.txt теперь открыт для вывода в конце файла.

#include <stdio.h>

void func(void) {
    FILE* fp ;

    fp = fopen("file.txt", "a");
    fprintf(fp, "Some data");
    fclose(fp);
}

Информация о результатах

Группа: Управление ресурсами
Язык: C | C++
По умолчанию: Вкл для рукописного кода, выкл для сгенерированного кода
Синтаксис командной строки: READ_ONLY_RESOURCE_WRITE
Воздействие: Высокое
Представлен в R2015b