实现dos下的copy功能,为什么每一次都多了一个字节(FILE),请高手回答
日期:2006-11-14 荐:
实现dos下的copy功能,为什么每一次都多了一个字节(FILE),请高手回答#include <stdio.h>#include <stdlib.h>#include <string.h>int main(int argc , char *argv[]){ int i,j; FILE *fpsource,*fpdest; char *source,*dest; for (i=1;i<argc;i =2) { if (strcmp(argv[i],"-?")==0||strcmp(argv[i],"/?")==0) printf("%s","usage: -s source file -d dest file"); if (strcmp(argv[i],"-s")==0) { j=i 1; source=malloc(sizeof(argv[j])); strcpy(source,argv[j]); } if (strcmp(argv[i],"-d")==0) { j=i 1; dest=malloc(sizeof(argv[j])); strcpy(dest,argv[j]); } } if((fpsource=fopen(source,"r"))==NULL) { printf("can not open source file"); free(source); free(dest); exit(0); } if((fpdest=fopen(dest,"w"))==NULL) { printf("can not open dest file"); free(source); free(dest); exit(0); } while(!feof(fpsource)) { fputc(fgetc(fpsource),fpdest); } fclose(fpsource); fclose(fpdest); free(source); free(dest); return 1;}应当是在while的问题吧,是用gcc version 3.2 (mingw special 20020817-1)vc6也有此问题??问题没看懂吗?每次实现copy后多了一个字节,源文件1521个字节, 目标文件是1522个字节现在只能实现文本的copy,二进制的不行,或有问题while(1) { char c; c=fgetc(fpsource); if(feof(fpsource)) break; fputc(c, fpdest); }if((fpsource=fopen(source,"rb"))==NULL)// { printf("can not open source file"); free(source); free(dest); exit(0); } if((fpdest=fopen(dest,"wb"))==NULL) //source=malloc(strlen(argv[j]) 1); // sizeof( )是错的 rb是从文件首部开始读的意思,sizeof得到是含"\0"字符串的大小啊用int rn;fpi=fopen(filenamei,"rb");fpo=fopen(filenameo,"wb");for(;;) { rn=fread(&c,1,1,fpi); if(rn!=1) break; putc(c,fpo);}不含"\0"的字符串的大小啊,隐性的错误给解释解释解释:原来的程序出问题的原因是由于feof操作在文件指针超过了文件大小的时候才返回true而最后一次读取会得到ff而只有通过这种方式读取,文件的真实大小才能不变而且不会由于文件内部有结束符而出错。为什么说sizeof是错的呢?我按要求能实现我的功能啊
标签: