关于C语言fgets()读取文件?

我读写的文件内容
123456
abcdef

#include<stdio.h>
#include<string.h>
void main()
{
FILE *read;
char buffer[64];
if((read = fopen("read.txt","rb")) == NULL)
{
printf("open file error!");
}
while(!feof(read))
{
fgets(buffer,4,read);
printf("strlen : %d\n",strlen(buffer));
puts(buffer);
}
}

我每次读取的是三个字符。fgets()读取的时候编译器是怎样知道读取三个字符的。列入。我读第一行的时候。读取两次后。第三次把'\r','\n'存放在串中。是不是读一行遇到'\n'之后。不论你要读取的字符数是多少。函数都会停止读字符。而做下面的操作。
可是读取第二行的时候。没有换行呀。第三次它怎么知道刚好三个字符,它是怎样知道最后刚好读三个字节的。结果还有点不正确!!

  C语言中fgets()函数说明:fgets()用来从参数stream 所指的文件内读入字符并存到参数s 所指的内存空间,直到出现换行字符、读到文件尾或是已读了size-1 个字符为止, 最后会加上NULL 作为字符串结束。

  原型  char *  fgets(char * s, int n,FILE *stream);

  参数:

  s: 字符型指针,指向存储读入数据的缓冲区的地址。

  n: 从流中读入n-1个字符。

  stream : 指向读取的流。

  返回值:

          1. 当n<=0 时返回NULL,即空指针。

          2. 当n=1 时,返回空串""。

          3. 如果读入成功,则返回缓冲区的地址。

          4. 如果读入错误或遇到文件结尾(EOF),则返回NULL。

   æ ‡å‡†åº“中fgets(...)的实现如下:

   char *fgets(char *s, int n,  FILE *stream)
               {
                    register int c;
                    register char *cs;
                    cs=s;
                    while(--n>0 &&(c = getc(stream))!=EOF)
                         if ((*cs++=  c) =='\n')
                           break;
                     *cs ='\0';
                     return (c == EOF && cs == s) ?NULL :s ;
                   }

  

温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-11-22
你的第二行应该没有回车加换行的,文件结尾有EOF,至于怎么读取三个字符的不用深究吧,有输入缓冲区 。fgets()在到达行末时停止本回答被网友采纳
第2个回答  2011-11-22
fgets(buffer,4,read);从流中读取buf_size-1个字符,除非读完一行,这边就是4-1=3啦
最后一个是'\0'
相似回答