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

news2024/11/24 5:00:17

文章目录

  • 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.coloradmin.cn/o/1551038.html

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

相关文章

Git,GitHub,Gitee,GitLab 四者有什么区别?

目录 1. Git 2. GitHub 3. Gitee 4. GitLab 5. 总结概括 1. Git Git 是一个版本管理工具&#xff0c;常应用于本地代码的管理&#xff0c;下载完毕之后&#xff0c;我们可以使用此工具对本地的资料&#xff0c;代码进行版本管理。 下载链接&#xff1a; Git - Downlo…

企业如何申请邓白氏编码(DUNS)呢?

尤其是食品企业&#xff0c;药品企业在申请美国FDA认证的时候&#xff0c;经常会听到一个名词——“邓白氏编码”&#xff0c;申请邓白氏编码是企业顺利完成FDA注册认证的必要前提&#xff0c;因此都需要提供邓白氏编码。 今天&#xff0c;小编就来为大家详细介绍下邓白氏编码…

Redis命令-String命令

4.3 Redis命令-String命令 String类型&#xff0c;也就是字符串类型&#xff0c;是Redis中最简单的存储类型。 其value是字符串&#xff0c;不过根据字符串的格式不同&#xff0c;又可以分为3类&#xff1a; string&#xff1a;普通字符串int&#xff1a;整数类型&#xff0…

8868体育助力西甲巴塞罗那 运作球员转会

西甲联赛的巴塞罗那俱乐部是8868体育的合作球队之一&#xff0c;近日有消息称&#xff0c;巴萨将出售埃里克-加西亚&#xff0c;球员身价估值1500万欧元。目前巴萨正在明确中卫位置的战略&#xff0c;已经确定要回购在贝蒂斯表现出色的里亚德&#xff0c;巴萨的想法是将埃里克-…

C语言----简单文件处理

当大家学习过动态内存开辟后&#xff0c;那么我们就已经可以把内存的每一个地方使用了。但是大家有没有想过&#xff0c;我们现在是在自己电脑上打代码。以后工作了&#xff0c;自己写代码在自己电脑上&#xff0c;老板要是想要一份代码看看&#xff0c;或者你成为大能了&#…

Vue3气泡卡片(Popover)

效果如下图&#xff1a;在线预览 APIs 参数说明类型默认值必传title卡片标题string | slot‘’falsecontent卡片内容string | slot‘’falsemaxWidth卡片内容最大宽度string | number‘auto’falsetrigger卡片触发方式‘hover’ | ‘click’‘hover’falseoverlayStyle卡片样式…

cesium加载.tif格式文件

最近项目中有需要直接加载三方给的后缀名tif格式的文件 <script src"https://cdn.jsdelivr.net/npm/geotiff"></script> 或者 yarn add geotiff npm install geotiff 新建tifs.js import GeoTIFF, { fromBlob, fromUrl, fromArrayBuffer } from geotif…

智慧公厕四大核心能力,赋能城市公共厕所智能化升级

公共厕所是城市基础设施中不可或缺的一部分&#xff0c;但由于传统的公共厕所在建设与规划上&#xff0c;存在一定的局限性&#xff0c;导致环境卫生差、管理难度大、使用体验不佳等问题&#xff0c;给市民带来了很多不便。而智慧公厕作为城市智能化建设的重要组成部分&#xf…

【直播课】2024年PostgreSQL CM认证实战培训课程于4月27日开课!

课程介绍 了解关注开源技术&#xff0c;学习PG以点带面 Linux/Andriod&#xff08;操作系统&#xff09;、Apache/Tomcat&#xff08;应用服务器&#xff09;、OpenStack/KVM&#xff08;虚拟化&#xff09;、Docker/K8S&#xff08;容器化&#xff09;、Hadoop&#xff08;大…

全志R128 SDK HAL 模块开发指南——GPIO

GPIO 模块介绍 整个 GPIO 控制器由数字部分&#xff08;GPIO 和外设接口&#xff09;以及 IO 模拟部分&#xff08;输出缓冲&#xff0c;双下拉&#xff0c;引脚Pad&#xff09;组成。其中数字部分的输出可以通过 MUX 开关选择&#xff0c;模拟部分可以用来配置上下拉&#x…

Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单实战案例 之七 简单闪烁效果

Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单实战案例 之七 简单闪烁效果 目录 Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单实战案例 之七 简单闪烁效果 一、简单介绍 二、简单闪烁效果实现原理 三、简单闪烁效果案例实现简单步骤 四、注意事项 一、简单…

C++超市商品管理系统

一、简要介绍 1.本项目为面向对象程序设计的大作业&#xff0c;基于Qt creator进行开发&#xff0c;Qt框架版本6.4.1&#xff0c;编译环境MINGW 11.2.0。 2.项目结构简介&#xff1a;关于系统逻辑部分的代码的头文件在head文件夹中&#xff0c;源文件在s文件夹中。与图形界面…

MySQL学习笔记------SQL(1)

关系型数据库&#xff08;RDBMS&#xff09; 建立在关系模型基础上&#xff0c;由多张相互连接的二维表组成的数据库 特点&#xff1a;使用表储存数据&#xff0c;格式统一&#xff0c;便于维护 使用SQL语言操作&#xff0c;标准统一&#xff0c;使用方便 SQL通用语法 SQL…

实力先锋!百望云入选“中国ToB行业影响力价值榜”

3月22日&#xff0c;2024「ToB头条行业大会」在北京大学中关新园举行。百望云实力入选“ToB行业年度榜单”&#xff0c;荣获“实力先锋企业”称号&#xff01;与百望云共同入围的企业还包括美团、腾讯云、网易云、WPS365、携程商旅等行业头部企业。 本次大会以“韧性生长、共话…

vue3+ts+element home页面侧边栏+头部组件+路由组件组合页面教程

文章目录 效果展示template代码script代码样式代码 效果展示 template代码 <template><el-container class"home"><el-aside class"flex" :style"{ width: asideDisplay ? 70px : 290px }"><div class"aside-left&q…

白酒:浓香型白酒的典型代表与特点

云仓酒庄的豪迈白酒作为白酒的品牌&#xff0c;具有一系列与众不同的特点和优势。下面云仓酒庄的豪迈白酒将从典型性、品质、口感和包装等方面深入分析白酒的特点&#xff0c;以及它如何体现浓香型白酒的魅力。 浓香型白酒是中国白酒的重要分支&#xff0c;以浓郁的香味和与众不…

Redis - 5k star! 一款简洁美观的 Redis 客户端工具~

项目简介 Tiny RDM 是一款现代化、轻量级的跨平台 Redis 桌面客户端&#xff0c;可在 Mac、Windows 和 Linux 系统上运行。初次打开 Tiny RDM&#xff0c;你会被它舒适的风格和配色所吸引&#xff0c;界面简约而不简单&#xff0c;功能齐全。 Tiny RDM 有着如下的功能特性 项…

进程与文件

目录 Linux的 > 和 >> 文件的本质 &#xff1a; 操作系统的系统调用函数 open&#xff1a; close&#xff1a;关闭文件 write&#xff1a; open的返回值&#xff1a; 操作系统视角中的“文件与进程之间的关系”&#xff1a; 从上图可以得知以下论点&#xff1a…

Linux:环境变量的特性及获取

目录 一、环境变量基本概念 1.1命令行参数 1.2常见环境变量 二、环境变量相关指令 创建本地变量 三、环境变量通常是具有全局属性的 一、环境变量基本概念 环境变量(environment variables)不是一个而是一堆&#xff0c;彼此之间其实没有关系。本质上是为了解决不同场景下…

Transformer的前世今生 day10(Transformer编码器

前情提要 ResNet&#xff08;残差网络&#xff09; 由于我们加更多层&#xff0c;更复杂的模型并不总会改进精度&#xff0c;可能会让模型与真实值越来越远&#xff0c;如下&#xff1a; 我们想要实现&#xff0c;加上一个层把并不会让模型变复杂&#xff0c;即没有它也没关系…