【C语言基础教程】getline函数与临时文件

文章目录

  • 前言
  • 一、getline函数
    • 1.1 为什么需要这个函数
    • 1.2 getline函数的使用
    • 1.3 使用示例
  • 二、临时文件
    • 2.1 临时文件的使用
    • 2.2 示例代码
  • 总结


前言

在C语言编程中,处理文本文件是一个常见的任务。然而,有时候我们需要处理那些我们不想在磁盘上创建的临时文件,或者我们需要从标准输入中读取用户的输入而不是一个文件。这时候,C语言提供了一些功能强大的函数来帮助我们处理这些情况。本教程将介绍getline()函数以及如何使用临时文件来处理这些需求。


一、getline函数

1.1 为什么需要这个函数

在我们学习这个函数之前,我们是并没有学习过任何一个函数可以读取一行的,要不然只能读取指定字节,要不然只能按一定格式读取,这个getline函数就是为我们解决这个问题而来的

1.2 getline函数的使用

getline函数定义如下:

ssize_t getline(char **lineptr, size_t *n, FILE *stream);

在这里插入图片描述
在man手册中,这个函数需要的头文件为stdio,所以使用他时,需要包含stdio头文件。
对于getline函数,他的参数含义如下:

  1. lineptr:这是一个指向字符指针的指针,用于指向存储读取到的文本行的缓冲区。如果lineptr为NULL,getline()函数将为你分配一个足够大的缓冲区来存储行,并将指针赋给lineptr。如果lineptr不为NULL,则getline()函数将尝试在已分配的缓冲区中存储行。在使用完毕后,需要负责释放lineptr指向的内存。

  2. n:这是一个指向lineptr指向的缓冲区的大小的指针。如果lineptr为NULL,n表示分配的缓冲区的大小。如果lineptr不为NULL,n应该设置为lineptr所指向的缓冲区的大小。getline()函数在读取行时,会根据需要动态调整缓冲区的大小,因此n的值也会被更新。

  3. stream:这是一个指向FILE结构的指针,表示要从中读取行的文件流。

返回值:

getline()函数返回读取到的字符数,包括行尾的换行符。如果函数成功读取到一行并且未到达文件尾,则返回读取到的字符数。如果函数在读取行时遇到文件结束符(EOF),则返回-1。如果发生错误,返回-1,并设置errno以指示错误类型。

1.3 使用示例

我们可以初始化一个linebuf为NULL,然后一个存储指向*lineptr指向的缓冲区的大小的指针,然后把这些参数填到getline函数中即可

FILE *file = fopen("./test.txt", "r");

char *linebuf = NULL;
size_t len;
getline(&linebuf, &len,file);

fclose(file);

printf("LineBuf:%s\n",linebuf);

在这里插入图片描述
在这里插入图片描述
如果我们打印len变量,你就会发现,这个len和我们strlen(buf)的长度不相等。这是因为他是一个动态去分配linebuf的内存,他会先分配指定的一部分,当这一部分不够用了,就会按一定的数量是增长,最终满足一行所需要的内存。

二、临时文件

2.1 临时文件的使用

我们可以使用下面这个函数创建一个临时文件,并且返回对应的文件指针

FILE *tmpfile(void);

他会以二进制读和写模式打开
在这里插入图片描述

2.2 示例代码

#include <stdio.h>

int main() {
    // 创建临时文件
    FILE *tmpFile = tmpfile();
    
    if (tmpFile != NULL) {
        // 向临时文件写入数据
        fprintf(tmpFile, "This is a temporary file.\n");
        fprintf(tmpFile, "It is created using tmpfile() function.\n");
        
        // 将文件指针移到文件开头
        rewind(tmpFile);
        
        // 从临时文件读取并输出数据
        char buffer[100];
        while (fgets(buffer, sizeof(buffer), tmpFile) != NULL) {
            printf("%s", buffer);
        }
        
        // 关闭临时文件
        fclose(tmpFile);
    } else {
        printf("Failed to create temporary file.\n");
    }
    
    return 0;
}


总结

本教程介绍了C语言中getline()函数的用法以及如何使用临时文件来处理文本数据。通过getline()函数,我们可以动态地从文件或标准输入中读取一行文本,并且不需要提前知道行的长度。这在处理不定长度的文本输入时非常有用。另外,通过创建临时文件,我们可以在不占用硬盘空间的情况下,暂时存储数据,并在程序结束后自动删除它们,这对于一些需要临时存储数据的应用场景非常实用。结合getline()函数和临时文件的使用,我们可以更加灵活地处理文本数据,使得我们的C程序更加强大和高效。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/403597.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Qwen-VL本地化部署及微调实践

Qwen-VL本地化部署及微调实践 创建虚拟环境模型部署下载模型文件下载项目代码安装python依赖环境修改web_demo_mm.py及openai_api.py的部分代码启动测试 模型微调环境部署数据准备微调 问题 创建虚拟环境 conda create -name vl python3.10.8模型部署 下载模型文件 https://…

React学习——快速上手

文章目录 初步模块思维 初步 https://php.cn/faq/400956.html 1、可以手动使用npm来安装各种插件&#xff0c;来从头到尾自己搭建环境。 如&#xff1a; npm install react react-dom --save npm install babel babel-loader babel-core babel-preset-es2015 babel-preset-rea…

从MATLAB到MWORKS,科学计算与系统建模仿真平台的中国选项

“中国需要自主的科学计算与系统建模仿真平台。” 工业软件是所有复杂系统研发设计、仿真验证和数字制造的必备工具&#xff0c;已经成为衡量一个国家工业竞争力的核心指标。在传统工业软件领域&#xff0c;我们一直处于落后状态&#xff0c;尤其是研发设计类工业软件&#xff…

uniapp开发微信小程序跳转到另一个小程序中

注意&#xff1a;一开始我的云上务工模块是单独的tabbar界面&#xff0c;但是小程序跳转好像不能直接点击tabbar进行&#xff0c;所以我将这里改成了点击首页中的按钮进行跳转 点击这里进行小程序跳转 目录 基础讲解 uniapp小程序跳转的两个方法 调用说明&#xff08;半屏跳转…

助力国产BMS管理芯片品牌发展,世强硬创获迈巨微电子授权代理

作为电池的核心半导体器件&#xff0c;BMS电池管理芯片在电动化时代的需求持续旺盛&#xff0c;并迎来了快速迭代的时期。 为满足电动自行车、AGV等市场对BMS电池管理芯片的需求&#xff0c;世强先进&#xff08;深圳&#xff09;科技股份有限公司&#xff08;下称“世强先进”…

记阿里云mysql丢表丢数据的实践记录

第一时间挂工单&#xff0c;联系工程师指引&#xff0c;现在回过来想&#xff0c;第一时间要确认发生时间。 1.通过性能视图&#xff08;马后炮的总结&#xff0c;实际凭记忆恢复了三四次才找到数据&#xff09; 2.先恢复数据 通过Navicat工具&#xff0c;结构同步&#xff0…

动态绑定样式,uniapp,用三元运算动态绑定多个class类样式,动态绑定的样式可以和原始样式共存

介绍 | uni-app官网 vue、uniapp中动态添加绑定style、class 9种方法实现_vue style动态绑定-CSDN博客 uniapp使用三元运算符动态绑定元素的style样式_uniapp style动态绑定-CSDN博客 对象写法,可以写多个class类 class类的名字&#xff1a;判断条件&#xff0c;最后结果只有…

元宵佳节到,互动礼品,该怎么邮寄最便宜呢?

家人们&#xff0c;一年一度的元宵佳节就要到了&#xff0c;大家吃汤圆了没&#xff0c;朋友之间是不是可以相互寄送点礼物啊&#xff0c;但是该怎么邮寄呢&#xff1f;用什么方式寄快递最便宜呢&#xff1f;客官别着急&#xff0c;听我慢慢说给你听。 首先&#xff0c;先说说各…

NPS配置内网穿透-Windows,PVE

Windows和PVE的区别就是下载客户端的时候一个选windows-amd64(64位的电脑)另一个选 linux-amd64(64位电脑),386对应的是32位的电脑. Releases ehang-io/nps (github.com) PVE的安装参考的是以下视频安装.利用PVE虚拟机&#xff0c;来打造属于自己的All In One系统吧&#xf…

谷歌掀桌子!开源Gemma:可商用,性能超过Llama 2!

2月22日&#xff0c;谷歌在官网宣布&#xff0c;开源大语言模型Gemma。 Gemma与谷歌最新发布的Gemini 使用了同一架构&#xff0c;有20亿、70亿两种参数&#xff0c;每种参数都有预训练和指令调优两个版本。 根据谷歌公布的测试显示&#xff0c;在MMLU、BBH、GSM8K等主流测试…

大型语言模型的语义搜索(一):关键词搜索

关键词搜索(Keyword Search)是文本搜索种一种常用的技术&#xff0c;很多知名的应用app比如Spotify、YouTube 或 Google map等都会使用关键词搜索的算法来实现用户的搜索任务&#xff0c;关键词搜索是构建搜索系统最常用的方法&#xff0c;最常用的搜索算法是Okapi BM25&#x…

两种动态代理(可以看到代理类的样子,方便理解)

这里写目录标题 jdk动态代理例子CGlib动态代理例子手写spring中的事务部分自定义注解版aop实现方式 Spring的两大重点&#xff0c;IOC和AOP&#xff0c;今天我们就来学AOP&#xff0c;众所周知AOP的底层是动态代理&#xff0c;让我们看一下这两种动态代理的区别。 例子&#x…

软件压力测试:测试方法与步骤详解

随着软件应用的不断发展&#xff0c;用户对系统性能的要求也逐渐提高。在不同的负载条件下&#xff0c;系统必须能够保持稳定、高效的运行。软件压力测试是一种验证系统在各种负载情况下性能表现的关键手段。本文将详细探讨软件压力测试的方法和步骤。 1. 明确测试目标 在进行压…

数字化转型:八大关键词揭示企业增长新引擎

导语&#xff1a; 在数字化浪潮的席卷下&#xff0c;企业正面临前所未有的转型挑战与增长机遇。为了把握这一时代的脉搏&#xff0c;我们需要深入剖析数字化转型的核心要素。本文将通过“洞察不确定性、驾驭复杂系统、重塑竞争边界、数据驱动决策、智能软件崛起、技术架构重塑…

WooCommerce商品采集与发布插件

如何采集商品或产品信息&#xff0c;并自动发布到Wordpress系统的WooCommerce商品&#xff1f; 推荐使用简数采集器&#xff0c;操作简单方便&#xff0c;且无缝衔接WooCommerce插件&#xff0c;快速完成商品的采集与发布。 简数采集器的智能自动生成采集规则和可视化操作功能…

C 语言基本语法及实用案例分享

一、什么是 C 语言&#xff1f; C语言是一种较早的程序设计语言&#xff0c;诞生于1972年的贝尔实验室。1972 年&#xff0c;Dennis Ritchie 设计了C语言&#xff0c;它继承了B语言的许多思想&#xff0c;并加入了数据类型的概念及其他特性。C语言是一门面向过程的计算机编程语…

AI绘画与修图:重塑数字艺术的新纪元

文章目录 一、AI绘画与修图的原理二、AI绘画的应用三、AI修图的优势四、面临的挑战五、未来发展趋势《AI绘画与修图实战&#xff1a;PhotoshopFirefly从入门到精通 轻松玩转AI绘画与修图实战》亮点内容简介作者简介 随着人工智能技术的飞速发展&#xff0c;AI绘画与修图已经成为…

DTV的LCN功能介绍

文章目录 LCN简介LCN获取LCN Conflict LCN简介 Logical Channel Number&#xff08;LCN&#xff09;是数字电视系统中用于标识和组织频道的逻辑编号。LCN的目的是为了方便用户浏览和选择频道&#xff0c;使得数字电视接收设备能够根据这些逻辑编号对频道进行排序和显示。 LCN…

掌握CSS盒子模型:一站式指南

更多web开发知识欢迎访问我的专栏>>> 盒子模型 01-选择器 结构伪类选择器 基本使用 作用&#xff1a;根据元素的结构关系查找元素。 选择器说明E:first-child匹配父元素的第一个子元素EE:last-child匹配父元素的最后一个子元素EE:nth-child(n)匹配父元素的第n个…

043-WEB攻防-PHP应用SQL注入符号拼接请求方法HTTP头JSON编码类

043-WEB攻防-PHP应用&SQL注入&符号拼接&请求方法&HTTP头&JSON&编码类 #知识点&#xff1a; 1、PHP-MYSQL-SQL注入-数据请求类型 2、PHP-MYSQL-SQL注入-数据请求方法 3、PHP-MYSQL-SQL注入-数据请求格式 演示案例&#xff1a; ➢PHP-MYSQL-数据请求类型…