您所在的位置:Seago-Microsoft Windows>>Windows管理脚本>> C

C

作者:menface 来源:新浪爱问 日期:2008-04-17 

#include <stdio.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.如何才能去掉最后这个字母?为什么会这样子呢?高手帮帮忙!
附件:b.txt 电脑问题网给出的最佳答案 显然,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);
}


喜欢你的回答……