Почему мой код не записывает результаты в файл? - PullRequest
0 голосов
/ 28 мая 2020

Я пишу код, который считывает символы из файла, а затем, если один из этих символов - «A», его следует изменить на «Z», после внесения этих изменений он должен записать его обратно в файл ( не добавлять, а писать), но всякий раз, когда я открываю файл после запуска кода, или он пуст, поврежден или компилятор кричит на меня (поскольку я пытался исправить его, внося некоторые изменения, вот код, который у меня есть до сих пор:

int main(){
    char variable1[2000000];
    FILE *filePointer1;
    FILE *filePointer2;
    int counter;
    int exact_char_numb;

    filePointer1 = fopen("File.txt", "r");
    filePointer2 = fopen("File.txt", "w");
    fread(variable1,2000000,sizeof(char), filePointer1);

    for(counter = 0; counter<= 2000000 ; counter ++){
        if(variable1[counter] == 'A'){
            variable1[counter] = 'Z';
        }
        if(variable1[counter] == '+'){
            exact_char_numb = counter; // I am using '+' to mark the end of
        }                              // the file (for now)
    }

    fwrite(variable1,sizeof(char),exact_char_numb,filePointer2);

    printf("%s\n", variable1);
    printf("%d\n", exact_char_numb);

    return 0;
}

Ответы [ 2 ]

3 голосов
/ 28 мая 2020

В этом вызове:

fwrite(variable1,sizeof(char),exact_char_numb,filePointer2);

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

0 голосов
/ 28 мая 2020

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

Вы должен проверить, было ли открытие потоков в file.txt успешным, проверив возвращенные указатели на нулевой указатель перед выполнением каких-либо операций с потоками:

if (!(filePointer1 = fopen("File.txt", "r")))
{
    fputs("Error occurred at opening file to read!", stderr);
    exit(1);
}

if (!(filePointer2 = fopen("File.txt", "w")))
{
    fputs("Error occurred at opening file to write!\n", stderr);
    exit(1);    
}

Кроме того, вам не нужно иметь два указателя на два разных потока. Используйте режим r+:

if (!(filePointer = fopen("File.txt", "r+")))
{
    fputs("Error occurred at opening file!", stderr);
    exit(1);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...