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

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

Описание

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

Например, вы открываете файл с помощью 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, Запись в дефект ресурса только для чтения происходит.

Исправление — открытый файл как перезаписываемый

Одно возможное исправление должно использовать спецификатор доступа "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