Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C将文件流作为函数参数传递_C_Function_File_Stream - Fatal编程技术网

C将文件流作为函数参数传递

C将文件流作为函数参数传递,c,function,file,stream,C,Function,File,Stream,此函数提供无限循环。有什么帮助吗?甚至可以将文件流作为参数传递给函数 #include<stdio.h> #include<stdlib.h> void fcopy(FILE *inFILE1){ FILE *inFILEcopy; char a; inFILEcopy=fopen("C:/Users/labuser.pcroot-PC.003/Desktop/empoleecopy.bak","w"); do{ a=fgetc(inFILE1);

此函数提供无限循环。有什么帮助吗?甚至可以将文件流作为参数传递给函数

#include<stdio.h>
#include<stdlib.h>
void fcopy(FILE *inFILE1){
FILE *inFILEcopy;
char a;
inFILEcopy=fopen("C:/Users/labuser.pcroot-PC.003/Desktop/empoleecopy.bak","w");
do{
        a=fgetc(inFILE1);
        fputc(a,inFILEcopy);
        if(feof(inFILE1))break;
    }while(1);
}
int main(){

FILE *inFILE;
inFILE=fopen("C:/Users/labuser.pcroot-PC.003/Desktop/empolee.dat","w");
fputs("My name is Anthony",inFILE);
fcopy(inFILE);  


}
要总结我的观点和评论,请按以下方式修改代码:

#include<stdio.h>
#include<stdlib.h>

void fcopy(FILE *inFILE1) {
    FILE *inFILEcopy;
    char a;
    inFILEcopy = fopen("C:/Users/scifani/Desktop/empoleecopy.bak", "w");
    do{
        a = fgetc(inFILE1);
        fputc(a, inFILEcopy);
        if (feof(inFILE1))break;
    } while (1);
    fclose(inFILEcopy);
}

int main(){
    FILE *inFILE;
    inFILE = fopen("C:/Users/scifani/Desktop/empolee.dat", "w");
    fputs("My name is Anthony", inFILE);
    fclose(inFILE);
    inFILE = fopen("C:/Users/scifani/Desktop/empolee.dat", "r");
    fcopy(inFILE);
}

我认为这是最好的办法。不过,我对任何改进都持开放态度。检查您是否对错误检查有任何疑问,有人会解释最好的方法。这应该可以很好地工作。

在将文件流传递给fcopy之前,您应该使用模式r关闭并重新打开文件流。可以将文件流作为函数参数传递。在给定的代码中缺少的东西很少,1个文件需要以读写模式打开。2由于写入文件,光标位于文件的末尾。这将导致a=fgetcinFILE1中没有数据;线为了读取数据,必须返回游标。还有一个:fgetc返回一个int,而不是char,所以char a;->INTA;还可以在执行while循环后将fcloseinFILEcopy添加到fcopy函数中
FILE* fcopy(char* yourFile) { // Or parse a FILE like you did but with a pointer

    FILE *inFILEcopy;
    inFILEcopy = fopen("C:/Users/labuser.pcroot PC.003/Desktop/empoleecopy.bak", "w");
    if (inFILEcopy == NULL)
        return NULL; // You'll have to check null to see if fcopy() failed
    FILE* inFILE1 = fopen(yourFile, "r");
    if (inFILE1 == NULL) {
        puts("File to be copied does not exist.\n");
        return NULL;
    }
    for (char a = fgetc(inFILE1); feof(inFILE1);)
    {
       fputc(a, inFILEcopy);
       if (ferror(inFILE1) || ferror(inFILEcopy)) { // If error in one of the two files
           if (fclose(inFILE1))
               puts("Couldn't close inFILE1\n");
           if (fclose(inFILEcopy));
               puts("Couldn't close inFILEcopy\n");
           puts("Error during copy.\n");
           return NULL;
       }
    }
    return inFILEcopy;
}

int main() {

   FILE *inFILE;
   inFILE= fopen("C:/Users/labuser.pcroot-PC.003/Desktop/empolee.dat","w");
   if (inFILE != NULL)
   {
       fputs("My name is Anthony", inFILE);
       if (!ferror(inFILE) || fclose(inFILE)) // If no error when writing and closing works, we can copy
       {
           inFILE = fcopy("C:/Users/labuser.pcroot-PC.003/Desktop/empolee.dat");
           if (inFILE != NULL)
               puts("Copy success\n");
       }
   }
}