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


    一、概述

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

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

    无论何种情况,fgets一旦从缓冲区中返回,buf内容总是以结尾的;

    二、示例

    编写一段这样的代码,结尾追加一个"|"字符好区分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 ,第二次返回456789;

     

    验证情况2:

    输入:

    12345678
    

    输出:

    1234567|8
    |

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

     验证情况3:

    输入:

    1234567
    

    输出:

    1234567|
    |

    可见输入1到7的时候已经刷出了缓冲区,缓冲区总是以n-1个内容长度自动加上 返回,第n个字符是 ,它在下一次返回(下一次马上返回了,尽管只有单独一个换行符)

  • 相关阅读:
    wince开发_摩托罗拉MC3100_打开条码设置
    【Scala类型系统】自身类型(self type)引用
    Scala 基础新手教程
    ActiveMQ消息队列的使用及应用
    nginx配置服务器负载均衡
    ActiveMQ_Linux安装
    js调试工具Console命令详解
    微信JS-SDK选择相册或拍照并上传PHP实现
    微信公众平台开发接口PHP SDK完整版
    微信JS接口汇总及使用详解
  • 原文地址:https://www.cnblogs.com/yiyide266/p/13549005.html
Copyright © 2020-2023  润新知