C语言中scanf、gets、fgets的区别

scanfgetsfgets都是C语言中用于从标准输入读取数据的函数,但它们之间存在一些重要的差异:

  1. scanf
    • scanf是一个格式化输入函数,它可以根据指定的格式从标准输入读取数据。
    • 使用scanf读取字符串时,需要小心处理缓冲区溢出的问题,因为scanf不会自动检查目标缓冲区的大小。
    • scanf在读取字符串时遇到空格、制表符或换行符会停止。
  2. gets
    • gets函数从标准输入读取一行,直到遇到换行符为止,并将换行符替换为字符串结束符\0
    • gets不检查目标缓冲区的大小,因此非常容易导致缓冲区溢出,引发安全问题。因此,在现代C语言编程中,gets函数已被弃用。
  3. fgets
    • fgets函数也从标准输入读取一行,直到遇到换行符或达到指定的最大字符数。
    • fgets会将换行符一起读入字符串(如果需要可以手动去除),并在字符串末尾添加\0
    • fgets允许指定一个最大字符数,从而可以防止缓冲区溢出,更加安全。

示例代码:

使用scanf:

#include <stdio.h>  
#include <string.h>  #define BUFFER_SIZE 50  int main() {  int number;  char string_scanf[BUFFER_SIZE];  // 使用 scanf 读取整数和字符串  printf("输入一个数字:\n");  scanf("%d", &number);  printf("使用scanf输入一个字符串:\n");  scanf("%49s", string_scanf); // 限制字符串长度为49,防止溢出  // 打印读取到的数据  printf("scanf输出的数字: %d\n", number);  printf("scanf输出的字符串: %s\n", string_scanf);  return 0;  
}

运行结果:

使用gets(不推荐使用):

#include <stdio.h>  
#include <string.h>  #define BUFFER_SIZE 50  int main() {  char string_gets[BUFFER_SIZE];  // 使用 gets 读取字符串(不推荐使用)  printf("使用gets输入一个字符串:\n");  gets(string_gets); // 不安全的,可能导致缓冲区溢出  // 打印读取到的数据  printf("gets输出的字符串: %s\n", string_gets);  return 0;  
}

运行结果:

使用fgets:

#include <stdio.h>  
#include <string.h>  #define BUFFER_SIZE 50  int main() {  char string_fgets[BUFFER_SIZE];  // 使用 fgets 读取字符串  printf("使用fgets输入一个字符串:\n");  fgets(string_fgets, BUFFER_SIZE, stdin); // 读取最多 BUFFER_SIZE-1 个字符  // 去除 fgets 读取的字符串末尾的换行符(如果存在)  string_fgets[strcspn(string_fgets, "\n")] = 0;  // 打印读取到的数据  printf("fgets输出的字符串: %s\n", string_fgets);  return 0;  
}

运行结果:

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

springboot注解开发如何映射对象型数据

创作灵感 最近在帮学校写一款小程序时&#xff0c;有这样一个数据需要展示&#xff1a;一条申请记录&#xff0c;里面包含了申请时间、申请状态、申请所提供的六条活动记录等待&#xff0c;其中&#xff0c;申请所提供的六条活动记录为一个数组&#xff0c;数组中的每个元素又…

【BUG】Hexo|GET _MG_0001.JPG 404 (Not Found),hexo博客搭建过程图片路径正确却找不到图片

我的问题 我查了好多资料&#xff0c;结果原因是图片名称开头是_则该文件会被忽略。。。我注意到网上并没有提到这个问题&#xff0c;遂补了一下这篇博客并且汇总了我找到的所有解决办法。 具体检查方式&#xff1a; hexo生成一下静态资源&#xff1a; hexo g会发现这张图片…

二维码门楼牌管理应用平台建设:网格化管理的新篇章

文章目录 前言一、二维码门楼牌管理应用平台的建设背景二、二维码门楼牌管理应用平台的功能特点三、二维码门楼牌管理应用平台的实际应用四、二维码门楼牌管理应用平台的前景展望 前言 随着信息技术的飞速发展&#xff0c;二维码门楼牌管理应用平台的建设已成为城市网格化管理…

李廉洋:4.20国际黄金,原油本周行情分析及下周一走势分析。

荷兰国际银行表示&#xff0c;所谓的美国国债期限溢价的回升&#xff0c;将为10年期国债收益率重返5%的关键水平铺平道路。从理论上来说&#xff0c;可将10年期美债收益率拆解为未来短端利率的期望期限溢价(term premium)。所谓期限溢价&#xff0c;是对投资者持有长期债券的风…

第十四届蓝桥杯省赛C/C++大学B组真题-飞机降落

思路&#xff1a;根据数据范围N<10猜测用DFS剪枝&#xff0c;因为菜狗不会状压dp。根据题目&#xff0c;一般这种飞机的题都会用到贪心的思想。思想是每架飞机都要卡极限最早降落时间&#xff0c;从而保证后面的飞机能够有充足时间降落。 代码参考博客MQy大佬有详细解答 #i…

深度学习之CNN

目录 我们为什么要用CNN&#xff0c;或者说究竟是因为什么我们要用CNN 卷积操作的实现原理 补充知识 torch.nn.Conv2d&#xff08;&#xff09; 注意 torch.nn.functional.conv2d&#xff08;&#xff09; torch.nn.functional.conv2d&#xff08;&#xff09;和torch.nn.…

前端-每天一道面试题(2)-localStorage/sessionStorage/cookie的区别

都是本地缓存数据的方式。 cookie:类型为小型文本文件&#xff0c;是某些网站为了辨别用户身份而储存在用户本地终端上的数据。是为了解决HTTP无状态导致的问题。最大为4KB,由一个名称&#xff0c;一个值&#xff0c;和其它几个用于控制cookie有效期&#xff0c;安全性&#x…

Fannel和Calico

一 1、路由器下面每一个端口都是一个vlan,隔离了广播包 192.168.1.0和192.168.2.0他们属于不同的vlan,没有三层交换机或者路由器,他们通不了信 不在同一个vlan,也就是子网,包就会走向网关(也就是路由器那里,路由器有路由表。查看目的地192.168.2.0在b口,从b口出去vlan…

模块与包及json模块学习

【一】模块与包介绍 【1】什么是模块 在Python中&#xff0c;一个py文件其实就是一个模块 文件名 knight.py中 py就是模块名 【2】模块的优点 有了模块以后可以增加程序的可读性&#xff0c;提高开发效率 【3】模块的来源 &#xff08;1&#xff09;在Python解释器内部内…

oCPC实践录 | 低转化场景下的智能出价设计

有读者私聊问笔者一个问题&#xff1a;低转化场景下怎么做智能出价。特别是对于电商、线索类行业&#xff0c;每个广告下转化量普遍非常低。 笔者也没有给出很完善的答案&#xff0c;也咨询了行业内资深的出价产品专家&#xff0c;下面尝试总结一下常见的思路&#xff0c;供大…

太多模型了!

多少个 AI 模型才算太多?这需要看你的角度。但每周 10 个可能有点过头了。在过去几天里,我们大概就看到了这么多新模型的推出,要说这些模型彼此之间有何对比,甚至一开始就能比较,都变得越来越难。那么这到底有什么意义呢? 我们正处于 AI 发展的一个奇怪时期,尽管整个过程一直…

MacOS 文件句柄数不够 Error: EMFILE: too many open files

MacOS 文件句柄数不够 Error: EMFILE: too many open files 直奔主题-解决方案 启动项目发现报错&#xff1a;Error: EMFILE: too many open files&#xff1b;经排查是因为单个微应用项目较大&#xff0c;发布过程中已经超过了mac默认的文件监听上限对文件系统进行大量并发调用…

互联网技术知识点总览——算法和数据结构

简介 本文对算法和数据结构的知识点整体框架进行梳理和分享如下&#xff1a;

Ubuntu无法安装向日癸15.2.0.63062_amd64.deb最新版

Ubuntu安装向日葵远程控制 安装包下载 安装方式 方式一&#xff1a;运行安装包安装 方式二&#xff1a;终端命令安装 通过以下教程可以快速的安装向日葵远程控制&#xff0c;本教程适用于Ubuntu18.04/20.04/22.04 安装包下载 进入向日葵远程控制下载官网下载向日葵远程控制Lin…

黑马程序员Linux简单入门学习笔记

Linux介绍 内核提供系统最核心的功能&#xff0c;如: 调度CPU、调度内存、调度文件系统、调度网络通讯、调度等系统级应用程序&#xff0c;可以理解为出厂自带程序&#xff0c;可供用户快速上手操作系统&#xff0c;如:文件管理器、任务管理器、图片查看、音乐播放等 目录结构 …

GlobalRouting - FastRoute布线算法运行流程(二)

文章目录 1. 运行步骤 FT::run 1. 运行步骤 首先生成2D的布线&#xff0c;然后进行层分配以及生成3D的布线&#xff0c;最后计算结果并返回。具体流程如下&#xff1a; 读取查找表flut, POST9.dat, POWV9.dat使用查找表生成RSMT&#xff0c;将多pin线网拆分为2pin线网进行第…

深度学习--CNN卷积神经网络(附图)

框架 让我们先看一下CNN的框架 卷积层中后是ReLu激活函数 &#xff0c;然后是深化池&#xff0c;之后是全连接&#xff0c;最后进行Softmax进行归一化。 所以&#xff0c;我们先逐一了解一下它们各个部分 全连接层 全连接层也称感知机&#xff0c;BP神经网络 全连接层&…

cpp中的右值引用()及其相关拓展知识

cpp中的右值引用 右值引用&#xff08;rvalue reference&#xff09;是 C11 引入的一个新特性&#xff0c;用于表示对临时对象&#xff08;右值&#xff09;的引用。右值是指那些无法被修改的临时对象&#xff0c;比如函数返回的临时对象、移动语义中的源对象等。右值引用的语…

机器学习常用评价指标的公式和含义

在机器学习中&#xff0c;特别是在分类任务中&#xff0c;评价模型性能常用以下指标。这些指标主要基于混淆矩阵&#xff0c;该矩阵记录了实际类别与模型预测类别的对应情况。下面是这些指标的定义和计算公式&#xff1a; 1. TP&#xff08;True Positives&#xff09;: - …

seatable部署之后network error【seatable】

这里写自定义目录标题 问题汇总 问题汇总 seatable服务部署后&#xff0c;组件显示正常运行&#xff0c;创建表单&#xff0c;显示Network error 点击错误信息&#xff0c;查看其跳转至另一个页面