在C中读取和写入字节(从/在文件中)

在C中读取和写入字节(从/在文件中),c,file,input,byte,output,C,File,Input,Byte,Output,对于操作系统类,我必须在C中解决以下问题: 在命令行中给出了三个文件,两个用于输入,一个用于输出。 输出文件从输入文件中获取,如下所示:从 第一个文件,第二个文件的20字节,第二个文件的10字节 第一个文件,第二个文件的下一个20字节,依此类推,直到 输入文件完成 简单但低效的解决方案:读写10/20字节的组。 一种高效(但不简单)的解决方案:读写块 有5000字节 我尝试了这个简单的解决方案。但它不起作用。。。有人能帮我吗 #include<stdio.h> int main(i

对于操作系统类,我必须在C中解决以下问题:

在命令行中给出了三个文件,两个用于输入,一个用于输出。 输出文件从输入文件中获取,如下所示:从 第一个文件,第二个文件的20字节,第二个文件的10字节 第一个文件,第二个文件的下一个20字节,依此类推,直到 输入文件完成

简单但低效的解决方案:读写10/20字节的组。 一种高效(但不简单)的解决方案:读写块 有5000字节

我尝试了这个简单的解决方案。但它不起作用。。。有人能帮我吗

#include<stdio.h>

int main(int argc, char* argv[], char* envp[]){
if (argc != 4){
    printf("%s", "Usage: c4h filename\n");
    return 0;
}

int c1,c2,i;
FILE *in1;
FILE *in2;
FILE *out;

in1 = fopen(argv[1], "r");
in2 = fopen(argv[2], "r");
out = fopen(argw[3], "wb");


if (in1 == NULL){
    printf("%s", "File not found!\n");
    return 0;
}

if (in2 == NULL){
    printf("%s", "File not found!\n");
    return 0;
}

while(feof(in1)!=0 && feof(in2)!=0){
    for(int i=0;i<20;i++)
        if(feof(in1)!=0){
            c1 = fgetc(in1);
            fputc(c1,out);
        }

    for(int i=0;i<10;i++){
        if(feof(in2)!=0){
            c2 = fgetc(in2);
            fputc(c2,out);
        }

}

fclose(in1);
fclose(in2);
fclose(out);
return 0;
}
#包括
int main(int argc,char*argv[],char*envp[]{
如果(argc!=4){
printf(“%s”,“用法:c4h文件名\n”);
返回0;
}
int c1,c2,i;
文件*in1;
文件*in2;
归档;
in1=fopen(argv[1],“r”);
in2=fopen(argv[2],“r”);
out=fopen(argw[3],“wb”);
if(in1==NULL){
printf(“%s”,“未找到文件!\n”);
返回0;
}
如果(in2==NULL){
printf(“%s”,“未找到文件!\n”);
返回0;
}
while(feof(in1)!=0&&feof(in2)!=0){

对于(int i=0;i,您的代码有三个问题:

  • argw
    而不是
    argv
  • while循环缺少关闭
    }
  • feof(file)!=0
    在您处于eof时计算为true,与您想要的条件正好相反,替换为
    !eof(file)
    ,该值仅在您不处于eof时计算为true

  • 还有一个小问题,在for循环中重新定义变量
    i
    for(int i=0;i您是否尝试过任何方法?您是否尝试过任何一种解决方案?您是否需要对其进行优化,或者低效的解决方案是否足够?我将从三个
    文件
    指针和一个循环开始。除此之外,由于您没有提出任何带有更具体问题的代码,因此没有太多评论。低效的解决方案应该足够了。i阅读并试图理解一些C教程,但我仍然不知道如何解决这个问题。当然,使用更简单的“低效”解决方案第一。多亏了操作系统和/或硬件的缓存,它不会产生你想象的那么大的影响。谢谢你!我真的很感谢你的帮助。很乐意帮忙,如果这个答案解决了你的问题,请帮大家一个忙,接受它(按下旁边的绿色复选标记)
    
    #include<stdio.h>
    
    int main(int argc, char* argv[], char* envp[]){
    if (argc != 4){
        printf("%s", "Usage: c4h filename\n");
        return 0;
    }
    
    int c1,c2,i;
    FILE *in1;
    FILE *in2;
    FILE *out;
    
    in1 = fopen(argv[1], "r");
    in2 = fopen(argv[2], "r");
    out = fopen(argv[3], "wb");
    
    
    if (in1 == NULL){
        printf("%s", "File not found!\n");
        return 0;
    }
    
    if (in2 == NULL){
        printf("%s", "File not found!\n");
        return 0;
    }
    
    while(!feof(in1) && !feof(in2)){
        for(i=0;i<20;i++)
            if(!feof(in1)){
                c1 = fgetc(in1);
                fputc(c1,out);
            }
    
        for(i=0;i<10;i++){
            if(!feof(in2)){
                c2 = fgetc(in2);
                fputc(c2,out);
            }
    
            }
    }
    
    fclose(in1);
    fclose(in2);
    fclose(out);
    return 0;
    };