日期:2014-05-16  浏览次数:20811 次

标准I/O函数fgets()的用法?//linux C编程
首先往/home/ryan/file里写入字符串"hello\nworld\n",然后关闭流fp,再重新打开流,从文件/home/ryan/file读取字符串的时候能将字符串显示在标准输出。但是如果将字符串"hello\nworld\n"写入/home/ryan/file后,没有关闭流,而是直接对该流执行fgets(),标准输出没有显示任何字符。请问这是为何?
#include<stdio.h>
int main()
{
  FILE * fp = NULL;
  char * retchar = NULL;
  char output[] = "hello\nworld\n";
  char buf[32]={0};
  if (NULL == (fp = fopen("/home/ryan/file","w+")));
  {
  perror("open /home/ryan/file");
  exit(1);
  }
  fputs(output,fp);
  fclose(fp);
  fopen("/home/ryan/file","r");
  while((retchar = fgets(buf,32,fp))!=NULL)
  {
  puts(buf);
  }
  fclose(fp);
  return 0;
}

------解决方案--------------------
将文件指针fseek偏移到文件头部。
------解决方案--------------------
修改一下。重新打开文件,把文件六指针指向文件的开头。
fp=fopen("/home/ryan/file","r");
fseek(fp, 0, SEEK_SET);
while((retchar = fgets(buf,32,fp))!=NULL)
{
puts(buf);
}
fclose(fp);
return 0;

 fseek 重定位流(数据流/文件)上的文件内部位置指针
  注意:不是定位文件指针,文件指针指向文件/流。位置指针指向文件内部的字节位置,随着文件的读取会移动,文件指针如果不重新赋值将不会改变指向别的文件。