完全详解fgets()函数!

C语言中输入函数(scanf()、fgets()和gets())的区别详解 在c语言中,有三种主要的输入函数:scanf(),fgets()以及gets() scanf: 以 space enter tab 作为结束, 且不接收 space, 回车符会残留在缓存区 它是一种格式化的输入方式,可一次性按照规定的格式输入多个数据域。 scanf函数是一个标准库函数,它的函数原型在头文件“stdio.h”中。与printf函数相同,C语言也允许在使用scanf函数之前不... 阅读详情
关于fgets()函数的描述如下:

fgets()

Read a string of characters from a stream

Synopsis:

#include <stdio.h>

char* fgets( char* buf, 
             size_t n, 
             FILE* fp );

Arguments:

buf
A pointer to a buffer inwhich   fgets()  canstore the characters that it reads.
n
The maximum number of characters to read.
fp
The stream from which to read the characters.

Description:

The fgets() functionreads a string of characters from the stream specifiedby fp, and stores them in thearray specified by buf.

It stops reading characters when:

  • the end-of-file is reached

    Or:

  • a newline ('\n') character is read

    Or:

  • n-1 characters have been read.

The newline character isn't discarded. A null character is placedimmediately after the last character read into the array.



我们利用以下代码来测试:


#include<stdio.h>


#define BUF_SIZE 10


int main()
{
    FILE *fp;
    char *buf[BUF_SIZE];
   if((fp=fopen("data","r"))==NULL)
    {
      printf("can't open the file!\n");
      exit(1);
    }
   fgets(buf,BUF_SIZE,fp);
    printf("thebuf is : %s!",buf);
    return0;
}



外加一个测试文件叫‘data’,里面内容如下:
0123456789
0123456789

结果如下:
BUF_SIZE=10

BUF_SIZE=11

BUF_SIZE=12


代码的作用是从'data'里面读取第一行内容,我们的主要目的是看换行符是怎么被处理的。
通过上面的调试查看内存,我们可以很清楚的看到fgets()函数的行为:
缓冲区的最后一个空间总是用来存储'\0'的,也就是说实际缓冲区最多只能放n-1个字符,而换行符\n也是被看作普通字符来处理的

c# U盘禁用---守护进程(插入,拔出,卸载等操作) 一、简介 传统的对U盘禁用,我们多采用修改注册表的方式,详情参考:https://blog.youkuaiyun.com/qq_25372599/article/details/79815407;本文将介绍一种其他的方式–后台守护程序。其原理非常简单:当守护程序检测到U盘的插入信号,我们自动卸载U盘,致使系统无法识别U盘,达到禁用U盘的效果。 二、程序设计 2.1 变量定义 strin... 阅读详情

相关推荐

RS422总线

①.RS422发送驱动器无高阻三态(浮空)状态RS422收发芯片,发送脚固定强驱动输出,永远钳位 A/B 差分电平,不能关断、不能悬空,只要芯片上电,TX+、TX - 就强制输出互补电压(一路高、一路低)。多条发送并联在同一组差分线上:两个驱动器一个拉 A 高、一个拉 A 低,B 线反向拉扯 → 电源→地大电流对灌,瞬间芯片过流发烫烧毁、总线电平短路错乱。注意:RS485 带DE/RE 收发使能脚:不用发送时可关闭驱动器,输出变成高阻浮空,让出总线,因此能多节点分时发送。③.多点通信方式,一主多从方式;

zhuimeng_1234的博客 223

fgets()用法笔记

为了避免缓冲区溢出,从终端读取输入时应当用fgets()代替gets()函数。但是这也将带来一个问题,因为fgets()的调用格式是: fgets (buf, MAX, fp)fgets (buf, MAX, stdin) buf是一个char数组的名称,MAX是字符串的最大长度,fp是FILE指针。fgets()函数读取到它所遇到的第一个换行符的后面,或者读取比字符串的最大长...

weixin_34049032的博客 1289

【软件安装系列】Ubuntu+mysql5.7.27+Jira8.3.1+邮箱服务器配置+Confluence6.15.7安装经验和采坑总结

文章目录一、软件准备(百度云易被吞,就不放了)1.1 官网下载的新鲜的Jira和Confluence1.2 linux的jdk一份1.3 Jira和Confluence的破解程序或者破解包一份1.4 java的连接器一份二、安装过程1--java环境配置2.1 将下载下来的jdk包解压在/usr/local/java目录中2.2 写入环境变量三、安装过程2--mysql5.7.27环境配置3.1 ...

xiaosha_的博客 6892

【转载】fgets函数用法详解

虽然用 gets() 时有空格也可以直接输入,但是 gets() 有一个非常大的缺陷,即它不检查预留存储区是否能够容纳实际输入的数据,换句话说,如果输入的字符数目大于数组的长度,gets 无法检测到这个问题,就会发生内存越界,所以编程时建议使用 fgets()。 fgets() 的原型为: # include <stdio.h> char *fgets(char *s, int siz...

冷眼看world的博客 1万+

Xilinx ZYNQ 7000学习笔记二(FSBL代码分析启动-汇编代码)

Xilinx ZYNQ 7000学习笔记

u011116085的博客 4247

西门子S7-1200 PLC与伺服电机控制实战解析

工业自动化控制系统中,PLC(可编程逻辑控制器)与伺服电机的协同工作是实现精密运动控制的核心技术。通过PROFINET工业以太网协议,PLC可以高效地控制多台伺服电机,实现定位、同步和插补等复杂运动。在实际工程应用中,硬件组态的正确配置和运动控制算法的优化是关键挑战。本文以西门子S7-1200 PLC控制五台伺服电机的项目为例,详细介绍了从硬件组态、运动控制程序实现到HMI界面设计的全流程。特别针对多轴同步插补运动、动态速度曲线调整等特殊工艺需求,提供了实用的解决方案和调试技巧,为工业自动化领域的工程师提供

weixin_30252709的博客 497

fgets()函数的详解以及使用时需要注意的一些细节-C语言基础

这篇文章要探讨的是“fgets()函数的详解以及使用时需要注意的一些细节”。涉及fgets()函数的应用和需要注意的问题。属于C语言基础篇(持续更新)。 fgets()(函数原型:char *fgets(char *restrict str, int size, FILE *restrict stream)) 这个函数原型不太好看出个所以然来,可以理解为(char *fgets(“容器的地址”...

因为自己也淋过雨,所以想给别人撑把伞。 1万+

H3C IPsec over GRE VPN 实验

配置 IPsec over GRE VPN 来连通两端内网

M建的博客 2472

7 - fgets()函数

fgets()函数学习

XDUryan的博客 1万+

H3C防火墙旁路部署实战:网关迁移到防火墙后,如何配置DHCP和VLAN间隔离策略?

本文详细介绍了H3C防火墙旁路部署实战,重点讲解网关迁移到防火墙后的DHCP配置和VLAN间隔离策略。通过实际案例和配置示例,帮助网络工程师解决传统核心交换机架构的性能瓶颈和安全管控问题,实现精细化访问控制。

weixin_42549451的博客 416

SAP数据导入工具(LSMW) 超级详细教程(批量导入内部订单)

用户提了个需求,让我批量导入内部订单几百个内部订单。我本打算用写段ABAP 代码来调用 BAPI (BAPI_INTERNALORDER_CREATE)就可以了。但想到我很久没有用过LSMW 了,都快要忘记了。于是我采用LSMW的方式,完成了任务。并把过程记录下来,形成教程方便我以后回头查看,分享出来也希望对大家有帮助。

IT小职员 2万+

fgets函数及其用法,C语言fgets函数详解

虽然用 gets() 时有空格也可以直接输入,但是 gets() 有一个非常大的缺陷,即它不检查预留存储区是否能够容纳实际输入的数据,换句话说,如果输入的字符数目大于数组的长度,gets 无法检测到这个问题,就会发生内存越界,所以编程时建议使用 fgets()。 fgets() 的原型为: # include <stdio.h> char *fgets(char *s, int size, FILE *stream); fgets() 虽然比 gets() 安全,但安全是要付出代价...

digitalkee的博客 12万+

Spring AI Alibaba实战训练营-13语音生成应用开发指南

本文介绍了如何基于Spring AI Alibaba创建DashScope语音应用,支持文本转语音(TTS)和语音转文本(STT)功能。主要内容包括:1)环境准备要求Java 17+、Maven 3.6+及阿里云DashScope API Key;2)通过Spring Initializr创建项目并配置相关依赖;3)设置API密钥的安全配置方法;4)实现语音合成的同步和流式功能,包括创建控制器类、调用API接口及保存语音文件。文章提供了详细的代码示例和配置说明,帮助开发者快速搭建语音处理应用。

program哲学 403

fgets()函数的详解-使用技巧-C语言基础

这篇文章要探讨的是“fgets()函数的详解以及使用时需要注意的一些细节”。涉及fgets()函数的应用和需要注意的问题。属于C语言基础篇(持续更新)。 fgets()(函数原型:char *fgets(char *restrict str, int size, FILE *restrict stream)) 这个函数原型不太好看出个所以然来,可以理解为(char *fgets(“容器的地址”, “容器的大小”, “从哪里读取”)) 一般用法: char a[100] = {0}; fgets

Devour_的博客 8万+

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

C语言fgets()与fputs()详解

文章目录fgets()与fputs()1⃣️fgets()优缺点:2⃣️fgets()返回值:3⃣️fgets()操作实例:3⃣️fgets()操作进阶: fgets()与fputs() fgets()函数的第二个参数指明了读入字符的最大数量。如果该参数为n,那么fgets函数将读入n-1个字符。如果fgets()函数读到一个换行符,会把它储存在字符串中。这点与gets不同,gets会丢弃换行符...

Kevin.wang 2万+

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

关于fgets()函数的使用方法

在读取字符串时,scanf()和转换说明符%s只能读取一个单词。gets()函数简单易用,它读取整行输入,直至遇到换行符,然后丢弃换行符,存储其余字符,并在这些字符的末尾添加一个空字符使其成为一个C字符串。但是出现一个问题,gets()函数无法检测数组是否装得下输入行。于是,在2011年,C11标准委员会在标准中废除了gets()函数。 gets()函数的替代品 fgets() fgets()函数的第2个参数指明了读入字符的最大数量。如果该参数的值是n,那么fgets()将读入n-1个字符,或者读到遇到的第

qq_62096086的博客 1万+

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

fgets函数详解

fgets函数是C语言标准库中的一个函数,用于从指定的文件流中读取一行字符,并将其存储在指定的字符数组中。它的原型在

weixin_43415263的博客 2700

fgets()函数和isalpha()函数

或者达到指定的最大字符数时停止读取,而缓冲区中剩余的字符可能包含未处理的换行符和其他多余的字符。函数也用于读取字符串,但它不检查缓冲区的大小,很容易导致缓冲区溢出,这是一个严重的安全隐患。如果不希望保留换行符,可以在使用读取到的字符串时进行处理,例如通过。printf("请输入多行文本,输入'exit'结束:\n");printf("你输入的是:%s", buffer);printf("你输入的内容是:\n%s", input);printf("读取到的字符: %s", buffer);

2401_87918616的博客 1181

C语言fgets()函数的用法总结

从c++11之后取消了gets()函数,用fgets()代替,用法有所不同,这里详细介绍下fgets()该如何使用。 char *fgets (char *__restrict __s, int __n, FILE *__restrict __stream) 第一个参数为数据存放的数组,第二个参数为最大长度,第三个参数为输入源,我们从键盘读入,参数为stdin。 #include <s...

没有胡子的猫Asimov 8117

C语言的字符串输入fgets()函数

C语言的字符串输入fgets()函数 fgets()函数简介 读字符串函数fgets()的功能是从指定的文件中读一个字符串到字符数组中,函数调用的形式为: fgets(字符数组名,n,文件指针),要从键盘输入时文件指针的参数为:stdin ; 其中的n是一个正整数。表示从文件中读出的字符串不超过 n-1个字符。在读入的最后一个字符后加上串结束标志'/0'。 示例分析 fgets()函数通过2个参数限制读入的字符数来解决溢出的问题。该函数专门设计用于处理文件输入,所以一般情况下可能不太好用。fgets()和

Galaxy_Robot的博客 7675

C语言常见字符串函数 —— gets()、fgets()、gets_s()详解及其注意事项

以下内容总结自《C primer plus》与 visual studio 2022语言参考库,主要讲解了gets()、fgets()、gets_s() 三种字符串函数的使用及其注意事项,本博文仅供参考。

Walevebot的博客 3万+

C语言中gets_s(),gets(),fgets()函数的比较。

先来讲讲大家最熟悉的gets()函数。 1.gets()函数不安全。 2.C11标准委员会已经将其废除,建议能不用尽量不用。 解释: gets()函数的作用:它读取整行输入,直至遇到换行符,然后丢弃换行符,储存其余字符,并在其末尾添加一个空字符使其成为一个字符串。 听起来挺安全的,问题在于gets()函数不检查函数边界,有多少字符它就给你输入多少(来者不拒),这就造成了一个问题:缓冲区溢出(buffer overflow)。这意味着:如果他们有可能擦掉程序中的其他数据(即把数据放到了存储别的数据的地方并将其

hunzhizi的博客 2万+

fgets()函数的使用分析

1、fgets函数的特点: 读取n-1(n为数组个数,第n个位置会自动添加‘\0’)个字符,以'\n'为结束标记,并在读取到‘\n’之后,在末尾处添加'\0'构成字符串; 当读了n-1个字符后,仍未读到'\n',也会自动添加‘\0’,结束读取。 2、fgets的返回值: 成功:返回指向该串的指针, 失败或读到文件结尾返回空指针, 所以可以通过fgets的返回值来判断文件是否读完 3、fgets经常用来读取配置文件的内容 配置文件cfg.ini内容如下: 注意: 1)配置文件的标题是.

modi000的博客 1万+

C语言fgets()函数

测试fgets(string,num,stdin)与定义的字符数组的长度的关系, str是要存入的字符的字符数组的指针,num指定了读入字符的最大个数,fgets()函数会在遇到第一个换行符或者读取了num-1个字符后停止读取;stdin指定了从键盘读入,需要注意的是,当一行字符串的个数小于num-1时,fgets会读入换行符并将其存入字符数组中 测试程序1: # inc...

weixin_44298590的博客 5991

gets()函数和fgets()函数的使用方法

gets()函数读取到\n(我们输入的回车)于是停止读取,但是它不会把\n包含到字符串里面去。然而,和它配合使用的puts函数,却在输出字符串的时候自动换行。fgets函数用来从文件中读入字符串。fgets函数的调用形式如下:fgets(str,n,fp);此处,fp是文件指针;str是存放在字符串的起始地址;n是一个int类型变量。函数的功能是从fp所指文件中读入n-1个字符放入str为起始地址的空间内;

醉饮半壶酒的博客 4604

C语言字符串读取函数 gets()与fgets()

在c语言中读取字符串有多种方法,比如scanf() 配合%s使用,但是这种方法只能获取一个单词,即遇到空格等空字符就会返回。如果要读取一行字符串,比如:I love BIT这种情况,scanf()就无能为力了。这时我们最先想到的是用gets()读取.gets()函数从标准输入(键盘)读入一行数据,所谓读取一行,就是遇到换行符就返回。gets()函数并不读取换行符’\n’,它会吧换行符替换成空字符’\

liuyanfeier的专栏 1万+
上一篇: 小程序去掉文档左侧多余空格!
下一篇: ubuntu12下unity侧栏添加新应用!
comoon
博客等级 码龄15年 1粉丝 11原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值