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