我尝试创建一个文件(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);
}
}
答案 0 :(得分:2)
您正在测试fopen
失败错误。如果 if (srcFile || dstFile) {
或srcFile
非空,则行dstFile
将返回true。
您需要测试的是中的任何一个 NULL:
if(srcFile==NULL || dstFile==NULL)
就个人而言,我将其拆分为连续的if
语句,以便您可以输出有关哪个文件无法打开的更详细错误,而不仅仅是“至少有一个文件无法打开”。