利用fgets实现行数读取

2023-10-31

 

首先在shell下man fgets。

#include <stdio.h>

char*fgets(char *s, int size, FILE *stream);

函数参数:s:存放输入字符的缓冲区地址

size:输入的字符串长度

stream:输入文件流

 

属性:fgets()  reads in at most one less than size characters from stream and stores

theminto the buffer pointed to by s.  Readingstops after an EOF or a newline.

If  a newline  is read, it is storedinto the buffer.  A terminating null byte

('\0')is stored after the last character in the buffer.

gets()函数的第二个参数指定了一次读取的最大字符数量。当fgets()读取到'\n'或已经读取了size-1个字符后就会返回,并在整个读到的数据后面添加'\0'作为字符串结束符。因此fgets()的读取大小保证了不会造成缓冲区溢出,但是也意味着fgets()函数可能不会读取到完整的一行(即可能无法读取该行的结束符'\n')。

 

返回值:fgets() return s on success, and NULLon error or when end of file

      occurs while no characters have been read.

函数返回值:成功:s

失败或读到文件尾:NULL

 

示例:利用fgets读取一个文件的行数。

程序如下:

/*************************************************************************

 @Author: wanghao

 @Created Time : Sun 20 May 2018 02:14:16 AMPDT

 @File Name: test1.c

 @Description:

 ************************************************************************/

#include <stdio.h>

#include <string.h>

 

#define MAX 128

 

int main(int argc, const char *argv[])

{

       intlen;

       FILE*fp;

       charbuf[MAX] = {0};

 

       if(argc< 2)

       {

              printf("usage:%s <src> <dest>\n",argv[0]);

              return-1;

       }

 

       fp= fopen(argv[1], "r+");

       if(fp< 0)

       {

              printf("open%s fail!\n",argv[1]);

              return-2;

       }

 

       len= 0;

       while(fgets(buf,MAX, fp))

       {

              /**In the buf string, if read a row, the last is the ‘\0’, and the second last is ‘\n’

              if(buf[strlen(buf)- 1] == '\n')

              len++;

       }

 

       printf("len= %d\n",len);

 

       return0;

}


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

利用fgets实现行数读取 的相关文章

  • ObjectOutputStream 方法:writeBytes(String str) 与 writeUTF(String s);

    两者之间的主要区别是什么 它们仍然都是用于编写字符串 public void writeUTF String str throws IOException Primitive data write of this String in mod
  • 在 Windows 上将原始数据写入物理磁盘(闪存驱动器)失败并显示“错误文件描述符” - Python

    我正在尝试将 USB 闪存驱动器作为 Windows 上的物理驱动器 如果重要的话为 10 执行直接数据读取和写入 我正在使用 Python 来做到这一点 我遵循了以下讨论 在 Windows 中使用 python 获得对原始设备的写入权限
  • 在 Java 中获取输入最有效的方式是什么?

    我正在解决这个问题question http www codechef com problems INTEST 这是我的代码 import java io IOException import java util Scanner publi
  • netty DefaultChannelPipeline 异常捕获

    不幸的是 我不明白 netty 服务器的输出 BUILD SUCCESSFUL Total time 3 seconds Jul 27 2014 2 04 44 AM io netty handler logging LoggingHand
  • Java Logger 不写入文件

    我正在尝试将 Logger 配置为写入应用程序配置文件夹中的文件 但我无法弄清楚如何执行此操作 这是我在程序启动时用于配置日志输出的函数 private void ConfigureLogger Logger logger Logger g
  • 使用 C++ 删除文本文件中重复行的内存有效方法

    使用 C 删除大型文本文件中的重复行的最有效内存方法是什么 让我澄清一下 我不是要求代码 只是最好的方法 不保证重复的行是相邻的 我意识到针对最小内存使用进行优化的方法会导致速度变慢 但这是我的限制 因为文件太大 我会对每一行进行散列 然后
  • 使用 Read::read_to_string 从 TcpStream 读取会挂起,直到远程端关闭连接

    我正在尝试实施Haskell IRC 机器人教程 https wiki haskell org Roll your own IRC bot在 Rust 中 我在阅读连接后服务器发送给我的内容时遇到一些困难 似乎发生的情况是 我连接并从服务器
  • 保持java套接字打开?

    我正在制作一个会自动更新的程序 游戏 我有更新部分 但没有检查版本 我本以为这会很容易 这就是我所做的 我为游戏编写了一个更新程序 并且编写了一个服务器 每次客户端 更新程序连接时 服务器都会启动一个线程 线程处理一切 游戏更新程序读取一个
  • 二进制文件 I/O

    如何用D语言读写二进制文件 在 C 语言中是 FILE fp fopen home peu Desktop bla bin wb char x 4 RIFF fwrite x sizeof char 4 fp 我在 D 找到了 rawWri
  • Python 上的 io.open() 和 os.open() 有什么区别?

    我意识到open 我一直在使用的函数是一个别名io open 以及导入 from os会掩盖这一点 通过以下方式打开文件有什么区别io模块和os module io open 是文件 I O 的首选高级接口 它将操作系统级文件描述符包装在一
  • 使用 Java 删除文件时出现问题 (apache commons io)

    我通过 JNI 调用 C 方法 该方法创建两个文件 给定目录中的文本日志文件和 pdf 文件 我想在执行 JNI 方法之前删除这些文件 如果存在 我正在使用 Apache commons io FileUtils forceDelete F
  • FORTRAN 写()

    在开始之前 我必须先声明一下 我是 FORTRAN 的新手 我正在维护 1978 年的一段遗留代码 它的目的是从文件中读取一些数据值 处理这些值 然后将处理后的值输出到另一个文本文件 给出以下 FORTRAN 代码 INTEGER NM S
  • osx 上的 aio:它是在内核中实现还是通过用户线程实现?其他选择?

    我正在开发我的小型 C 框架 并且有一个文件类 它也应该支持异步读写 除了在我发现的一些工作线程中使用同步文件 I O 之外 唯一的解决方案是 aio 无论如何 我环顾四周并在某处读到 在 Linux 中 aio 甚至不是在内核中实现的 而
  • 在 C# 中创建文件的最快方法

    我正在运行一个程序来测试在包含大量文件的文件夹中查找和迭代所有文件的速度 该过程中最慢的部分是创建超过 100 万个文件 我目前正在使用一种非常幼稚的方法来创建文件 Console Write Creating 0 N0 file s of
  • 如何检查并关闭Excel文件是否已在Java中打开[重复]

    这个问题在这里已经有答案了 可能的重复 Java 检查文件是否已打开 https stackoverflow com questions 1390592 java check if file is already open 我正在制作一个
  • 更新写入 java 文本文件的对象

    将 Java 对象或列表写入文本文件是可以的 但我想知道如何更新或重写以前写入的对象而不再次写入对象 例如 假设有一个 java util List 有一组对象 然后将该列表写入文本文件 然后稍后该文件将被再次读取并从列表中获取所有对象 然
  • 在Python中修改大型文本文件最后一行的最有效方法

    我需要更新几个超过 2GB 的文件的最后一行 这些文件由无法读取的文本行组成readlines 目前 它可以通过逐行循环来正常工作 但是 我想知道是否有任何编译库可以更有效地实现这一点 谢谢 目前的方法 myfile open large
  • java中filewriter的flush和close函数之间的区别

    我需要知道Java中的flush和close函数之间的确切区别是什么 当在写入文件期间将数据转储到文件中时 请提供一个例子 flush just确保所有缓冲数据都写入磁盘 在这种情况下 更一般地说 通过您正在使用的任何 IO 通道刷新 之后
  • 如何通过pthreads管理两个或多个消费者?

    我有一个正在寻求解决的通用问题 即从标准输入或常规文件流发送到应用程序的二进制数据块 应用程序又将二进制数据转换为文本 使用线程 我想在将文本传输到下一个应用程序之前对其进行处理 该应用程序会进一步修改该文本 依此类推 作为一个简单的测试用
  • 解析输入,除了 System.in.read() 之外不使用任何东西

    我很难找到具体的细节System in read 有效 也许有人可以帮助我 似乎扫描仪会更好 但我不允许使用它 我被分配了一个任务 我应该以 Boolean Operator Boolean 的形式读取控制台用户输入 例如T F 或 T T

随机推荐

  • 逻辑表达式三种化简方法

    逻辑表达式三种化简方法 目录 公式化简法 卡诺图化简法 机器化简法 一 公式法化简 是利用逻辑代数的基本公式 对函数进行消项 消因子 常用方法有 并项法 利用公式AB AB A 将两个与项合并为一个 消去其中的一个变量 吸收法 利用公式A
  • Unity WebGL Calls Rust Wasm

    Unity WebGL Calls Rust Wasm Jin Qing s Column May 2023 Reference https zenn dev ruccho articles 261136f7bdb003 In this a
  • 【通信原理】数字基带传输的线路码型

    数字基带传输的线路码型 简单介绍数字基带传输的线路码型的信号波形的特点 以及生成方法 注意观察频谱 文末附Matlab代码 以下包括双极性NRZ 单极型NRZ 双极型RZ 单极型RZ 差分码 曼切斯特码 数字双相码 密勒码 CMI码 AMI
  • STM32+二氧化碳传感器(FS00301)

    配置串口4 uart c u8 USART4 RX BUF USART REC LEN 接收缓冲 最大USART REC LEN个字节 u16 USART4 RX STA 0 接收状态标记 void uart4 init u32 bound
  • Istio Java SDK API - 资源访问-VirtualService/Gateway/DestinationRule/ServiceEntry

    环境 参考上一篇文章 Java如何连接Istio 参考上一篇文章 访问Isito资源 VirtualService Gateway DestinationRule ServiceEntry 项目源码 package com you micr
  • QML控件类型:Tumbler

    一 描述 Tumbler 用于通过旋转轮子来选择一个值 Tumbler model 10 API 类似于 ListView 和 PathView 等视图的 API 可以设置模型和委托 并且 count 和 currentItem 属性提供对
  • html登录页面设计

    html登录页面设计实训 html和CSS概述 1 html HTML 是一种标记语言 用于定义网页的结构和内容 包括段落 标题 列表 链接等等 它使用标签来标识不同的内容 并且这些标签可以用于嵌套 2 CSS CSS 是一种样式表语言 用
  • R语言中 attach()与detach(),及with()的使用

    attach what pos 2L name deparse substitute what backtick FALSE warn conflicts TRUE 1 attach 是对what添加路径索引 避免重复输入what名称 参数
  • 数据分析利器Python——列表、元组和字典

    文章目录 目录 文章目录 前言 一 列表和元组 1 创建列表和元组 2 列表和元组的通用用法 2 1 通过索引使用元素 2 2 子序列 2 3 加法 2 4 乘法 2 5 in运算符 2 6 长度 最大值和最小值 2 7 序列封包和序列解包
  • hdu1253 胜利大逃亡(三维bfs索搜)

    http acm hdu edu cn showproblem php pid 1253 第一次做做三维的 思路跟二维的没有区别 这道题目第一次出现Memory Limit Exceeded 这种问题 找了很长时间才发现应该是先判断在存入
  • Java8中处理日期和时间的常用API

    场景 java8中引入了一个新包java time 包含了多数会用到的核心类 注 博客 https blog csdn net badao liumang qizhi 关注公众号 霸道的程序猿 获取编程相关电子书 教程推送与免费下载 实现
  • Modbus ASCII LRC生成

    Modbus ASCII的报文生成顺序为 1 生成PDU 2 生成LRC校验码 将LRC附加到PDU后面 3 将2中的数组转换成HEX格式的文本 4 在HEX格式文本的0位置插入冒号 在HEX格式文本的后面附加Windows换行符 生成LR
  • 什么是Kubernetes?

    刚刚进学校实验室 第一次开会导师和小组同学说了n次Kubernetes 从来没听过 一脸懵逼 Kubernetes也有很多人把它叫K8S 原文链接 http omerio com 2015 12 18 learn the kubernete
  • 双指针详解

    1 定义 顾名思义 双指针即用两个不同速度或不同方向的指针对数组或对象进行访问 通过两个不同指针的碰撞从而达到特定的目的 2 解决问题 在时间或空间条件有限的情况下使用单向遍历需要消耗大量的时间或者根本无法解决问题 这时候就需要我们使用双指
  • 使用IDEA打开eclipse项目

    文章目录 点击左上角的File New Project from Existing Sources 选择到要打开的项目路劲 选择好后点击OK 先勾选 Import project from external model 后选择Eclipse
  • python如何调用参数配置文件_如何使用Python3实现json作为配置文件?

    当脚本重复使用时候 我们需要不断的去更新一些参数 这样使得时间浪费很多 效率也不高 这该怎么办呢 小编在遇到同样问题时 发现了一个可以解决的方式 那就是利用json 大家有需求的可以来看下哦 相信大部分人遇到这个问题 最先尝试的是 py文件
  • Alist简单使用指南

    一 Alist 简介 一款支持多种存储的目录文件列表程序 支持 web 浏览与 webdav 后端基于gin 前端使用react 下面使用 docker和caddy 主要用来支持https 来部署 效果 二 docker部署 配置docke
  • Nginx转发超简单实现

    使用场景 用Nginx做转发 实现更好的服务器管理 此处实现多域名转发 假设服务器分配 客户访问机器IP 192 168 137 70 Nginx接收访问请求 并转发到49服务器 真实服务机器IP 192 168 137 49 IIS或者A
  • push c语言什么作用,“c语言”中,“pop函数”和“push函数”的作用分别是什么?...

    这个算是数据结构的内容讲解的是一个叫做栈类型的数据结构 这个数据结构的特点就是后进先出 最后放进去的数据最先拿出来 pop函数就是拿出数据的操作 push是放入是数据的操作 内容拓展 pop函数呵push函数的使用 include incl
  • 利用fgets实现行数读取

    首先在shell下man fgets include