fopen()返回NULL,errno为0

时间:2016-12-04 21:01:10

标签: c file null fopen errno

我尝试创建一个文件(src),从中读取读取的字符并将它们复制到另一个文件(dst),当我从命令行参数获取的文件名但fopen()函数返回时空值。 我在这里读到我应该使用errno。

#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);
    }
}

1 个答案:

答案 0 :(得分:2)

您正在测试fopen失败错误。如果 if (srcFile || dstFile) {srcFile 非空,则行dstFile将返回true。

您需要测试的是中的任何一个 NULL:

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

就个人而言,我将其拆分为连续的if语句,以便您可以输出有关哪个文件无法打开的更详细错误,而不仅仅是“至少有一个文件无法打开”。