分类：电脑/网络-程序设计
问题：C&VCcopyfile#include&lt;stdio.h& 
#include <std.h>#include <stdlib.h>void main(int argc,char * argv[]){  FILE * in,* out;  if (argc!=3)  {    printf("You entry the number of filename is error!");    exit(0);  }  if((in=fopen(argv[1],"r"))==NULL)  {    printf("Can't open infi#include <std.h>#include <stdlib.h>void main(int argc,char * argv[]){  FILE * in,* out;  if (argc!=3)  {    printf("You entry the number of filename is error!");    exit(0);  }  if((in=fopen(argv[1],"r"))==NULL)  {    printf("Can't open infile!");    exit(0);  }  if((out=fopen(argv[2],"w"))==NULL)  {    printf("Can't open outfile!");    exit(0);  }  while(!feof(in))    putc(getc(in),out);  fclose(in);  fclose(out);}假设上例程序打开文件名为:"a.txt",a.txt文件中的内容为abcdefg,将a.txt复制到b.txt,b.txt中会增加一个y上面加两点的字母,十六进制为FF.如何才能去掉最后这个字母?为什么会这样子呢?高手帮帮忙!
回答：显然，LZ所说的y上面加两点的字母，就是把-1以putc写进文件的那个字符。分析如下：首先要明白，文件内容中实际并不含有所谓的文件结束；文件的结束标志，是通过文件指针所指向的数据结构来标记的，与其所使用的文件系统有关。第二，正确使用 feof 函数的一个原则就是：“先读文件后用 feof 判断”。 而LZ正相反，是先用feof判断，后读文件。所以会多循环一次，将最后一次getc函数返回的-1也写进了文件之中。记住fgetc函数读取字符后，返回的是int整型数据。当然，如果每次对getc的返回值进行判断，也可达到目的。正确形式之一的代码如下，请参考：#include <stdio.h> #include <stdlib.h> void main(int argc,char * argv[]) {int chr; FILE * in,* out; if (argc!=3) { printf("You entry the number of filename is error!"); exit(0); } if((in=fopen(argv[1],"r"))==NULL) { printf("Can't open infile!"); exit(0); } if((out=fopen(argv[2],"w"))==NULL) { printf("Can't open outfile!"); exit(0); } while(!feof(in)) {chr = getc(in);if(chr != -1)putc(chr,out); }fclose(in); fclose(out); }