feof()的问题。

look01 2004-12-01 07:28:46
用来测试0字节文件并不是返回TURE,而是返回-1,WHY?
...全文
85 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
look01 2004-12-02
  • 打赏
  • 举报
回复
to:niukuonan(niukuonan)
while(!feof(fp))//此时,fp才指向第一个字节
{
fputc(....);
ch=fgetc(fp);
}
循环结束,ch的值是-1,而不是文件最后一个字符?老潭书上那个复制文件的例子就会将-1也复制过去
niukuonan 2004-12-01
  • 打赏
  • 举报
回复
当你对一个0字节的文件进行feof(fp)时
系统成功的得到fp所指文件的指针
二进制流不等于0,所以你再怎么测feof()返回都是0
niukuonan 2004-12-01
  • 打赏
  • 举报
回复
这个问题我做了测试
当你刚刚打开一个文件的时候
比如说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的书,上面多数都用的第一种写法
yuanyou 2004-12-01
  • 打赏
  • 举报
回复
错了,这个宏中文件最后是用2表示的
yuanyou 2004-12-01
  • 打赏
  • 举报
回复
看看FILE结构体的定义也许会找的答案
在stdio.h
fseek()中定义了
#define SEEK_CUR 1
#define SEEK_END 2
#define SEEK_SET 0
也许你会发现这个宏中文件最后是用0表示的.
大概如此吧
look01 2004-12-01
  • 打赏
  • 举报
回复
我测试了非0字节文件,也得不到正确的结果。
snow810211 2004-12-01
  • 打赏
  • 举报
回复
看书上说feof一般是对二进制文件操作时候用
xzxsimon 2004-12-01
  • 打赏
  • 举报
回复
feof()测试文件到达文件尾时返回非零值,否则返回零值。
如果定义成signed int feof(),如果到达文件尾,或者空文件,返回1,但是由于定义的时符号型,计算结果为-1。
我的理解,仅供参考
sw_man 2004-12-01
  • 打赏
  • 举报
回复
我想是说明函数调用失败,文件里根本没有EOF标志,怎么会返回TURE?

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧