feof()的问题。
用来测试0字节文件并不是返回TURE,而是返回-1,WHY? 问题点数:0、回复次数:9Top
1 楼sw_man()回复于 2004-12-01 19:41:00 得分 0
我想是说明函数调用失败,文件里根本没有EOF标志,怎么会返回TURE?Top
2 楼xzxsimon(歪歪)回复于 2004-12-01 19:45:04 得分 0
feof()测试文件到达文件尾时返回非零值,否则返回零值。
如果定义成signed int feof(),如果到达文件尾,或者空文件,返回1,但是由于定义的时符号型,计算结果为-1。
我的理解,仅供参考Top
3 楼snow810211(阳光)回复于 2004-12-01 19:52:02 得分 0
看书上说feof一般是对二进制文件操作时候用Top
4 楼look01(^-^)回复于 2004-12-01 19:57:22 得分 0
我测试了非0字节文件,也得不到正确的结果。Top
5 楼yuanyou(元友)回复于 2004-12-01 20:34:47 得分 0
看看FILE结构体的定义也许会找的答案
在stdio.h
fseek()中定义了
#define SEEK_CUR 1
#define SEEK_END 2
#define SEEK_SET 0
也许你会发现这个宏中文件最后是用0表示的.
大概如此吧Top
6 楼yuanyou(元友)回复于 2004-12-01 20:36:54 得分 0
错了,这个宏中文件最后是用2表示的Top
7 楼niukuonan(niukuonan)回复于 2004-12-01 20:44:26 得分 0
这个问题我做了测试
当你刚刚打开一个文件的时候
比如说fp=fopen("in.txt","wb");
这时,fp并不指向文件的第一个字节
你可以这样
先用
char ch;
ch=fgetc(fp);//fp指向第一个字节
while(!feof(fp))//此时,fp才指向第一个字节
{
fputc(....);
ch=fgetc(fp);
}
或者用
fseek(fp,0,0);
来使fp指向第一个字节
你可以看看c的书,上面多数都用的第一种写法
Top
8 楼niukuonan(niukuonan)回复于 2004-12-01 20:47:17 得分 0
当你对一个0字节的文件进行feof(fp)时
系统成功的得到fp所指文件的指针
二进制流不等于0,所以你再怎么测feof()返回都是0Top
9 楼look01(^-^)回复于 2004-12-02 17:00:41 得分 0
to:niukuonan(niukuonan)
while(!feof(fp))//此时,fp才指向第一个字节
{
fputc(....);
ch=fgetc(fp);
}
循环结束,ch的值是-1,而不是文件最后一个字符?老潭书上那个复制文件的例子就会将-1也复制过去
Top




