首页 > 系统服务 > 详细

[Linux]每次一行的标准I/O

时间:2020-09-15 17:08:41      阅读:54      评论:0      收藏:0      [点我收藏+]

一、概述

 

调用fgets的流只有在以下3种情况下才会刷出缓冲区(即函数返回):

  1. 遇上换行符;
  2. 填满自定义缓冲区的指定长度n - 1个字节,也就是说假设自定义缓冲区长度为8,那么满7个字节就会返回。(造成这一结果的原因是函数要保证每次返回的字符串后面不是接\n就是接\0,如果输入内容在填满缓冲区之前还没有换行符,那么函数就要把末尾的一个字节设置为\0,确保返回的字符串带\0);
  3. 出错或者到达文件末尾(EOF);

二、示例

编写一段这样的代码,结尾追加一个"|"字符好区分fgets返回的次数:

#include <stdio.h>
#include <stdlib.h>

#define BUFFSIZE 8

int main(void)
{
    char* buff = malloc(BUFFSIZE);
    char* receive = NULL;
    while((receive = fgets(buff, BUFFSIZE, stdin)) != NULL)
    {
        printf("%s|", receive);
    }
    return 0;
}

 验证情况1

输入:

123
456789

输出:

123
|456789|

可见两次返回,第一次输出123\n,第二次返回456789\0;

 

验证情况2:

输入:

12345678

输出:

1234567|8|

可见两次输出,第一次由于输入填满了缓冲区n - 1 即7字节,所以输出了1234567\0,第二次输出剩下的8\0;

 

[Linux]每次一行的标准I/O

原文:https://www.cnblogs.com/yiyide266/p/13549005.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!