код с f = fopen(«текстовый файл»,»a») возвращает значение NULL для f на другом устройстве, но отлично работает на моем

#c #file #codeblocks #fopen

Вопрос:

Привет, я создал и запустил программу на своей машине, но когда я пытаюсь запустить код на другой машине, он не запускается.

 #include <stdio.h>
#include <stdlib.h>
int main()
{
    FILE *f;
    char buff[50];
    f = fopen("textfile.txt","r");
    if(f==NULL)
        exit(1);
    printf("Contents before appendiing: ");
    while(fgets(buff,50,f)!=NULL)
        fputs(buff,stdout);
    fclose(f);
    f = fopen("textfile.txt","a");
    if(f==NULL)
    {
        printf("Unable to open file");
        exit(1);
    }
    printf("nEnter contents to append (type 'exit'to stop): ");
    do{
        fgets(buff,50,stdin);
        if(strcmp(buff,"exitn")==0)
            break;
        fputs(buff,f);
    }while(f!=NULL);
    fclose(f);
    f = fopen("textfile.txt","r");
    if(f==NULL)
    {
        printf("Unable to open file");
        exit(1);
    }
    printf("nContents after appendiing: ");
    while(fgets(buff,50,f)!=NULL)
        fputs(buff,stdout);
    fclose(f);
    return 0;
}

 

Программа выдает этот вывод на моей исходной машине, где он работает так, как и должен быть:

 Contents before appendiing: hello world

Enter contents to append (type 'exit'to stop): hello
exit

Contents after appendiing: hello world
hello

Process returned 0 (0x0)   execution time : 10.006 s
Press any key to continue.
 

В то время как он дает это в моей другой машине:

 Contents before appendiing: hello world
Unable to open file
Process returned 1 (0x1)   execution time : 4.452 s
Press any key to continue.
 

Я понимаю, что это происходит, потому что значение f стало НУЛЕВЫМ, но почему это происходит на одной машине, а не на другой.
Я запускаю Windows 10 и использую code::blocks IDE на обеих машинах.

Комментарии:

1. Выведите сообщение об ошибке, представленное, errno чтобы узнать причину fopen() сбоя.

2. Поскольку вы могли прочитать файл на обеих машинах, у вас, вероятно, нет разрешения на запись в файл на второй машине.

3. В стороне: управление циклом } while(f!=NULL); неверно, вы должны управлять им так: while(fgets(buff,50,stdin) != NULL) { ... }

4. @Флюгер Я довольно новичок в программировании, поэтому было бы полезно, если бы вы могли сказать мне, почему «while(f!=NULL);» неверно

5. Потому что это продолжает проверять, был ли выходной файл успешно открыт, что вы уже сделали. Значение f не изменится во время записи вывода. Цикл должен проверять конец входного файла.