以下是引用84009030在2005-8-31 3:06:52的发言:
把file1的内容复制到file2文件里,但是file2的后尾多了一个ascii码为152的字符??
file1.txt:i love u jat.
file2.txt:i love u jat.(句号后面多了一个值为152的字符)
该如何解决?
#include<stdio.h>
main()
{
FILE*in,*out;
char ch,infile[10],outfile[10];
printf("input infile name:\n");
scanf("%s",infile);
printf("input outfile name:\n");
scanf("%s",outfile);
if((in=fopen(infile,"r"))==NULL)
{
printf("cannot open infile\n");
exit(0);
}
if((out=fopen(outfile,"w"))==NULL)
{
printf("cannot open outfile\n");
exit(0);
}
while(!feof(in))
fputc(fgetc(in),out);
fclose(in);
fclose(out);
getch();
}
多写的那个字节其实是-1,当fgetc()在文件末无法取得字节时函数返回-1,这样就将-1写入文件了,我是这样理解的,不知道正确与否,虽然做了试验可以证明这一点,不过我不知道这么说多不多,请知道原因的朋友不吝赐教。这个问题我很久以前就注意了,因为没什么大碍,今天看见你的帖子让我重新考虑了一下。下面贴上我的实验代码:
#include <stdio.h>
int main(int argc,char *argv[]) {
if(argc < 3) {
printf("Usage: Mycopy [Source] [Destinaion]\n");
return 0;
}
else {
FILE *fin,*fout;
fin=fopen(argv[1],"rb");
if(!fin) {
printf("No such file named as %s exist!\n",argv[1]);
return 0;
}
fout=fopen(argv[2],"wb");
int rbyte;
while(1) {
if((rbyte=fgetc(fin)) != EOF)
fputc(rbyte,fout);
else
break;
}
printf("Copy complete!\n");
fclose(fin);
fclose(fout);
return 0;
}
}