getc在文件结束后应该停止打印垃圾

时间:2013-06-10 05:40:05

标签: c

该计划有什么问题?

#include<stdlib.h>
#include<stdio.h>
#include<fcntl.h>
main(   )
{
  char * buf="robot.c";
  char c;int i=0;   
  FILE*fp=fopen(buf,"r");
  if(!fp)
    printf("open error\n");
  while(1)
    {
      //printf("size%c\n",*fp->_IO_read_ptr);
      //while((c=getc(fp))>0)
      c=getc(fp);
      printf("%c",c);
      //getc(fp);
      //printf("new size%c\n",*fp->_IO_read_end);
      for(;i<1000000000;i++);
    }
}

1 个答案:

答案 0 :(得分:6)

正如@Barmar注意到的那样,当找到EOF时,你不会检查并打破while循环,所以它是printf垃圾。

相反,写下你的喜欢:

while((c=getc(fp))!=EOF){
      printf("%c",c);
      for(;i<1000000000;i++);
}

注意:c 必须为int才能保留EOF值。
非常好阅读:Definition of EOF and how to use it effectively