2016-12-04 4 views
0

Я попытался создать файл (src), прочитать прочитанные символы из него и скопировать их в другой файл (dst), когда имя файлов, которые я получаю от команды line, но функция fopen() возвращает NULL. Я читал здесь, что я должен использовать errno.fopen() return NULL и errno is 0

#include <stdio.h> 
#include <errno.h> 
void copyFile(char *src, char *dst); 

int main(int args, char **argv) { 
    int option = args; 

    if(option == 3){ 
     copyFile(argv[1], argv[2]); 
    } 

    return 0; 
} 

void copyFile(char *src, char *dst) { 
    FILE *srcFile = fopen(src, "rb"); 
    FILE *dstFile = fopen(dst, "wb"); 

    if (srcFile || dstFile) { 
     printf("Error %d \n", errno); 
     return; 
    } else { 
     char buff[2]; 
     while (fread(buff, 2, 1, srcFile) != 0) { 
      fwrite(buff, 2, 1, dstFile); 
     } 
     fclose(srcFile); 
     fclose(dstFile); 
    } 
} 

ответ

2

Вы тестируете ошибку fopen. Линия if (srcFile || dstFile) { вернет значение, если либоsrcFile, либо dstFile is не NULL.

Что вам нужно проверить, если любой из них являются NULL:

if(srcFile==NULL || dstFile==NULL)

Лично я бы разделить это на последовательные if заявления, так что вы можете выводить более подробную ошибку о который не удалось открыть, а не просто «по крайней мере один файл не открывается».

+0

Это не единственная проблема - если первый «fopen» выходит из строя, а второй успешно завершается, второй устанавливает значение «errno» равным нулю, чтобы указать успех, поэтому должно быть «if (! Fopen (src)) print (ошибка); if (! fopen (dst)) print (errno); ', чтобы правильно распознать коды errno. –