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

我读写的文件内容123456abcdef#include<stdio.h>#include<string.h>voidmain(){FILE*read;charbuffe... 我读写的文件内容
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'之后。不论你要读取的字符数是多少。函数都会停止读字符。而做下面的操作。
可是读取第二行的时候。没有换行呀。第三次它怎么知道刚好三个字符,它是怎样知道最后刚好读三个字节的。结果还有点不正确!!
展开
 我来答
一骑当后
推荐于2016-10-14 · 知道合伙人数码行家
一骑当后
知道合伙人数码行家
采纳数:40298 获赞数:306440
网络、设备维护、电路、弱电检测。

向TA提问 私信TA
展开全部

  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 ;
                   }

  

stushl
2011-11-22 · TA获得超过329个赞
知道小有建树答主
回答量:730
采纳率:50%
帮助的人:337万
展开全部
你的第二行应该没有回车加换行的,文件结尾有EOF,至于怎么读取三个字符的不用深究吧,有输入缓冲区 。fgets()在到达行末时停止
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
非强勿狂
2011-11-22 · 超过15用户采纳过TA的回答
知道答主
回答量:53
采纳率:0%
帮助的人:44.9万
展开全部
fgets(buffer,4,read);从流中读取buf_size-1个字符,除非读完一行,这边就是4-1=3啦
最后一个是'\0'
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式