【C语言】 gets()puts()fgets()fputs()字符串输入输出函数的用法

文章目录

  • C语言中的字符串输入输出函数:gets、puts、fgets与fputs
    • gets函数
    • puts函数
    • fgets函数
    • fputs函数
  • C语言中的字符串输入输出函数知识点总结
    • 结语

C语言中的字符串输入输出函数:gets、puts、fgets与fputs

在这里插入图片描述

在C语言中,处理字符串的输入和输出是非常常见的操作。本文将介绍四个用于处理字符串输入输出的函数:getsputsfgetsfputs。尽管gets函数在某些情况下可能会引发安全问题,但了解其工作原理和使用方法仍然是必要的。同时,我们还将重点介绍fgetsfputs函数,这两个函数在处理字符串输入输出时提供了更安全的方式。

gets函数

gets函数用于从标准输入(通常是键盘)读取一个字符串。它会一直读取,直到遇到换行符。然而,这个函数并不推荐使用,因为它容易导致缓冲区溢出。

char *gets(char *str);

gets函数的问题在于它没有办法防止缓冲区溢出。如果用户输入的字符串(不包括结尾的’\0’字符)超过了为str分配的空间,那么就会发生缓冲区溢出。这是一个严重的安全问题,因为它可以使攻击者有机会运行任意代码。

因此,我们不推荐使用gets函数,而推荐使用fgets函数。fgets函数可以限制读取的字符数,避免缓冲区溢出。

puts函数

puts函数用于向标准输出(通常是屏幕)写入一个字符串。它会自动在字符串末尾添加一个换行符。

int puts(const char *str);

以下是一个使用puts函数的示例:

#include <stdio.h>int main() {// 定义一个字符串char str[] = "Hello, World!";// 使用puts函数输出字符串// puts函数会自动在字符串末尾添加一个换行符puts(str);return 0;
}

fgets函数

fgets函数用于从指定的文件流中读取一个字符串。它会一直读取,直到遇到换行符或文件结束。与gets函数不同,fgets可以限制读取的字符数,避免缓冲区溢出。

char *fgets(char *str, int n, FILE *stream);

以下是一个使用fgets函数的示例:

#include <stdio.h>int main() {// 定义一个足够大的字符数组来存储输入的字符串char str[100];// 提示用户输入字符串printf("Enter a string: ");// 使用fgets函数从标准输入读取字符串// fgets函数会读取最多99个字符(因为我们给它传递了100作为参数),然后在字符串末尾添加一个'\0'字符fgets(str, 100, stdin);// 输出用户输入的字符串printf("You entered: %s", str);return 0;
}

fputs函数

fputs函数用于向指定的文件流中写入一个字符串。与puts函数不同,fputs函数不会自动在字符串末尾添加一个换行符。

int fputs(const char *str, FILE *stream);

以下是一个使用fputs函数的示例:

#include <stdio.h>int main() {// 定义一个字符串char str[] = "Hello, World!";// 使用fputs函数将字符串写入到标准输出// 注意,fputs函数不会自动在字符串末尾添加一个换行符fputs(str, stdout);return 0;
}

C语言中的字符串输入输出函数知识点总结

在C语言中,处理字符串输入输出是非常常见的操作。下面是关于getsputsfgetsfputs函数的知识点总结,帮助你更好地理解和记忆这些函数的使用方法:

  1. gets函数

    • gets函数用于从标准输入读取一个字符串,直到遇到换行符。
    • 不推荐使用gets函数,因为它无法防止缓冲区溢出,可能导致安全问题。
  2. puts函数

    • puts函数用于向标准输出写入一个字符串,并在末尾添加换行符。
    • 示例:puts(str); 可以直接输出字符串 str
  3. fgets函数

    • fgets函数用于从指定的文件流中读取一个字符串,可以限制读取的字符数,避免缓冲区溢出。
    • 示例:fgets(str, 100, stdin); 可以从标准输入读取最多99个字符到字符串 str 中。
  4. fputs函数

    • fputs函数用于向指定的文件流中写入一个字符串,不会自动添加换行符。
    • 示例:fputs(str, stdout); 可以将字符串 str 写入到标准输出中。

结语

在C语言中,getsputsfgetsfputs函数提供了处理字符串输入输出的基本方法。尽管gets函数可能会引发安全问题,但了解其工作原理和使用方法仍然是必要的。同时,fgetsfputs函数提供了更安全的方式来处理字符串输入输出。希望本文能帮助你更好地理解和使用这些函数。如果你有任何问题或需要进一步的帮助,欢迎随时提问。

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

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

相关文章

Java关键字之 assert

语法 assert关键字语法有两种用法&#xff1a; 1、assert <boolean表达式> 如果<boolean表达式>为true&#xff0c;则程序继续执行。 如果为false&#xff0c;则程序抛出AssertionError&#xff0c;并终止执行。 2、assert <boolean表达式> : <错误信…

翔云身份证实名认证接口-PHP调用方法

网络平台集成实名认证接口&#xff0c;是顺应当下网络实名制规定&#xff0c;有效规避法律风险。互联网平台若没有实名认证功能&#xff0c;那么便无法保证网民用户身份的真实性&#xff0c;很有可能被虚假用户攻击&#xff0c;特别是在当网络平台产生垃圾信息乃至是违法信息时…

必示科技携手云杉网络发布“智能可观测性联合解决方案”

近日&#xff0c;必示科技与云杉网络携手发布“智能可观测性联合解决方案”&#xff0c;整体方案融合云杉网络DeepFlow产品在可观测性领域、必示科技AIOps产品在运维数据分析领域的深厚技术积淀&#xff0c;完整实现IT系统高质量、高性能、全栈的可观测数据采集、智能监控和智能…

Go —— defer

defer defer 语句用于延迟函数的调用&#xff0c;常用于关闭文件描述符、释放锁等资源释放场景。但 defer 关键字只能作用于函数或函数调用。 defer func(){ // 函数fmt.Print("Hello&#xff0c;World!") }()defer fmt.Print("Hello&#xff0c;World!&…

第十三届国际纯数学与应用数学会议(ICPAM 2024)即将召开!

第十三届国际纯数学与应用数学会议将于2024年7月17日至20日在克罗地亚萨格勒布召开。ICPAM是一项连续成功举办十二年的年度会议&#xff0c;其汇集了纯数学和应用数学领域的教授、研究人员、学者和学生&#xff0c;为跨行业交流&#xff0c;经验分享&#xff0c;学术界合作以及…

ArcGIS Pro横向水平图例

终于知道ArcGIS Pro怎么调横向图例了&#xff01; 简单的像0一样 旋转&#xff0c;左转右转随便转 然后调整图例项间距就可以了&#xff0c;参数太多就随便试&#xff0c;总有一款适合你&#xff01; 要调整长度&#xff0c;就调整图例块的大小。完美&#xff01; 好不容易…

【C++】手撕哈希表的闭散列和开散列

> 作者&#xff1a;დ旧言~ > 座右铭&#xff1a;松树千年终是朽&#xff0c;槿花一日自为荣。 > 目标&#xff1a;手撕哈希表的闭散列和开散列 > 毒鸡汤&#xff1a;谁不是一边受伤&#xff0c;一边学会坚强。 > 专栏选自&#xff1a;C嘎嘎进阶 > 望小伙伴们…

对AOP的理解

目录 一、为何需要AOP&#xff1f;1、从实际需求出发2、现有的技术能解决吗&#xff1f;3、AOP可以解决 二、如何实现AOP&#xff1f;1、基本使用2、更推荐的做法2.1 “基本使用”存在的隐患2.2 最佳实践2.2.1 参考Transactional&#xff08;通过AOP实现事务管理&#xff09;2.…

SpringBoot国际化配置流程(超详细)

前言 最新第一次在做SpringBoot的国际化&#xff0c;网上搜了很多相关的资料&#xff0c;都是一些简单的使用例子&#xff0c;达不到在实际项目中使用的要求&#xff0c;因此本次将结合查询的资料以及自己的实践整理出SpringBoot配置国际化的流程。 SpringBoot国际化 "i…

用系统观念打造智慧公厕,引领智慧城市的发展

智慧公厕&#xff0c;作为智慧城市建设的一部分&#xff0c;具有重要意义。在高度发达的科技条件下&#xff0c;如何打造高质量的智慧公厕是一个值得思考的问题。本文将以智慧公厕源头实力厂家广州中期科技有限公司&#xff0c;大量精品案例项目现场实景实图实例&#xff0c;探…

Rust控制台输出跑马灯效果,实现刷新不换行,实现loading效果

要在 Rust 中实现控制台刷新而不换行&#xff0c;以实现类似 "loading" 状态的效果&#xff0c;你可以使用 \r&#xff08;回车符&#xff09;来覆盖上一行的内容。 use std::io::{self, Write}; use std::thread; use std::time::Duration;fn main() {let loading_…

浅模仿小米商城布局(有微调)

CSS文件 *{margin: 0;padding: 0;box-sizing: border-box; }div[class^"h"]{height: 40px; } div[class^"s"]{height: 100px; } .h1{width: 1528px;background-color: green; } .h11{background-color:rgb(8, 220, 8); } .h111{width: 683px;background-c…

动态内存操作函数使用过程中会遇见的问题

越界访问 首先我们上一个代码&#xff0c;看看这个的代码的问题 这个代码的问题显而易见 &#xff0c;就是在循环里面&#xff0c;产生了越界访问的问题&#xff0c;这里你开辟了10个整形空间&#xff0c;但是从0-10一共是11个整形空间。导致访问不合法的空间&#xff0c;从而…

卷积神经网络-卷积层

卷积神经网络-卷积层 1多层感知机&#xff08;MLP&#xff09;2卷积神经网络&#xff08;CNN&#xff09;3MLP和CNN关系与区别4仍然有人使用MLP的原因&#xff1a;5MLP的局限性&#xff1a;MLP的应用领域&#xff1a;总结&#xff1a;6全连接到卷积全连接层 vs 卷积层结构差异应…

一文教你学会用群晖NAS配置WebDAV服务结合内网穿透实现公网同步Zotero文献库

文章目录 前言1. Docker 部署 Trfɪk2. 本地访问traefik测试3. Linux 安装cpolar4. 配置Traefik公网访问地址5. 公网远程访问Traefik6. 固定Traefik公网地址 前言 Trfɪk 是一个云原生的新型的 HTTP 反向代理、负载均衡软件&#xff0c;能轻易的部署微服务。它支持多种后端 (D…

LLLM并发加速部署方案(llama.cpp、vllm、lightLLM、fastLLM)

大模型并发加速部署 解析当前应用较广的几种并发加速部署方案&#xff01; llama.cpp vllm lightLLM fastLLM

使用yolov9来实现人体姿态识别估计(定位图像或视频中人体的关键部位)教程+代码

yolov9人体姿态识别&#xff1a; 相较于之前的YOLO版本&#xff0c;YOLOv9可能会进一步提升处理速度和精度&#xff0c;特别是在姿态估计场景中&#xff0c;通过改进网络结构、利用更高效的特征提取器以及优化损失函数等手段来提升对复杂人体姿态变化的捕捉能力。由于YOLOv9的…

Java SPI 机制

SPI 机制的定义 在Java中&#xff0c;SPI&#xff08;Service Provider Interface&#xff09;机制是一种用于实现软件组件之间松耦合的方式。它允许在应用程序中定义服务接口&#xff0c;并通过在类路径中发现和加载提供该服务的实现来扩展应用程序功能。 SPI 机制通常涉及三…

ubuntu 中安装docker

1 资源地址 进入ubuntu官网下载Ubuntu23.04的版本的镜像 2 安装ubuntu 这里选择再Vmware上安装Ubuntu23.04.6 创建一个虚拟机&#xff0c;下一步下一步 注意虚拟机配置网络桥接&#xff0c;CD/DVD选择本地的镜像地址 开启此虚拟机&#xff0c;下一步下一步等待镜像安装。 3…

Idea2023.3.6版本无法启动设置界面-settings界面打不开无反应---IntelliJ Idea工作笔记013

先说一下网上有,把某个文件删除的 有说是因为汉化问题的 可以看到,其实都不是,这样弄就好了,很简单 Please report thisjava.lang.ClassCastException: class [Lcom.intellij.execution.filters.CompositeInputFilter$InputFilterWrapper; cannot be cast to class java.uti…