嵌入式Linux系统编程 — 4.1 字符串输入输出

目录

1 字符串输出

1.1 字符串输出函数简介

1.2 示例程序

2 字符串输入

2.1 字符串输入简介

2.2 示例程序


程序运行时,需打印信息至标准输出 stdout 设备 或标准错误 stderr设备(譬如屏幕),如调试信息、报错信息、中间产生的变量的值等,以监控和分析状态。同时,程序还需从stdin(如键盘)读取并解析字符串。

1 字符串输出

1.1 字符串输出函数简介

常用的字符串输出函数有 printf()、putchar()、 puts()、 fputc()、 fputs()。我们经常使用 printf()函数来输出字符串信息,而并没有使用到 putchar()、 puts()、 fputc()、 fputs()这些函数,原因在于printf()可以按照自己规定的格式输出字符串信息,一般称为格式化输出;而 putchar()、 puts()、 fputc()、 fputs()这些函数只能输出字符串,不能进行格式转换。

与 printf()一样, putchar()、 puts()、 fputc()、 fputs()这些函数也是标准 I/O 函数, 属于标准 C 库函数, 所以需要包含头文件<stdio.h>,并且它们也使用 stdio 缓冲。

putchar()puts()fputc()fputs() 是用于输出字符串的基本函数,它们的特点如下:

  • putchar() 用来输出单个字符。
  • puts() 用于输出一个字符串,并且会在字符串末尾自动添加换行符。
  • fputc() 功能类似于 putchar(),但它可以指定输出到任意文件流,而不仅仅是标准输出。
  • fputs() 则用于向指定的文件流输出字符串,不会自动添加换行符。

函数的原型如下:

#include <stdio.h>int putchar(int c); // 输出单个字符 c 到 stdout
int puts(const char *s); // 输出字符串 s 到 stdout,并在末尾添加换行符
int fputc(int c, FILE *stream); // 将字符 c 输出到指定的文件流 stream
int fputs(const char *s, FILE *stream); // 将字符串 s 输出到指定的文件流 stream

1.2 示例程序

#include <stdio.h>int main() 
{char greeting[] = "Hello, World!";char name[] = "Linux";// 使用 puts 输出字符串,末尾自动添加换行符puts(greeting);// 使用 putchar 输出单个字符,每次调用输出一个字符putchar('H');putchar('i');putchar('\n');// 使用 fputc 输出单个字符到标准错误流 stderrfputc('!', stderr);// 使用 fputs 输出字符串到标准输出流 stdout,不自动添加换行符fputs("Put: ", stdout);fputs(name, stdout);putchar('\n'); // 手动添加换行符return 0;
}

使用 puts() 输出了一个字符串 "Hello, World!",然后使用 putchar() 分别输出了 "Hi" 和换行符。接着使用 fputc() 将字符 '!' 输出到了标准错误流 stderr。最后使用 fputs() 输出了 "Kimi says: " 和字符串 "Kimi",然后手动添加了一个换行符。运行结果如下:

2 字符串输入

2.1 字符串输入简介

常用的字符串输入函数有 gets()、 getchar()、 fgetc()、 fgets()。与 printf()对应, 在 C 库函数中同样也提供了格式化输入函数 scanf()。 scanf()与 gets()、 getchar()、 fgetc()、 fgets()这些函数相比,在功能上确实有它的优势,但是在使用上不如它们方便、简单、更易于使用。

与 scanf()一样, gets()、 getchar()、 fgetc()、 fgets()这些函数也是标准 I/O 函数, 属于标准 C 库函数, 所以需要包含头文件<stdio.h>,并且它们也使用 stdio 缓冲。

gets()、 getchar()、 fgetc()、 fgets()的特点如下:

  • gets() 函数是不安全的,因为它不检查目标缓冲区的大小,可能会导致缓冲区溢出。因此,它已经被废弃,不推荐使用。作为替代,应该使用 fgets()
  • getchar() 函数用于从标准输入读取单个字符。
  • fgetc() 函数用于从指定的文件流读取单个字符,通常用于标准输入。
  • fgets() 函数用于从指定的文件流读取一行数据,最多读取 size-1 个字符,并将结果存储在字符串 s 中。它在读取到换行符时会将其存储在缓冲区中,但不会输出到 stdout

函数原型如下:

char *gets(char *s); // 从 stdin 读取一行数据到字符串 s,直到遇到换行符或 EOF,不推荐使用,已废弃
int getchar(void); // 从 stdin 读取下一个字符
int fgetc(FILE *stream); // 从指定的文件流 stream 读取下一个字符
char *fgets(char *s, int size, FILE *stream); // 从指定的文件流 stream 读取最多 size-1 个字符到字符串 s,直到遇到换行符、EOF 或最大字符数限制

2.2 示例程序

#include <stdio.h>
#include <string.h>int main() {char buffer[100];char ch;// 使用 getchar() 读取单个字符printf("Press a key: ");ch = getchar(); // 读取单个字符// 清除换行符while (getchar() != '\n') continue; // 循环直到遇到换行符printf("You pressed: %c\n", ch);// 使用 fgets() 读取一行文本printf("Enter a sentence: ");fgets(buffer, sizeof(buffer), stdin); // 读取一行文本// 去除末尾的换行符if (buffer[strlen(buffer) - 1] == '\n') {buffer[strlen(buffer) - 1] = '\0';}printf("You entered: %s\n", buffer);// 使用 fgetc() 读取单个字符printf("Press another key: ");ch = fgetc(stdin); // 读取单个字符// 清除换行符while (getchar() != '\n') continue; // 清除换行符printf("You pressed again: %c\n", ch);return 0;
}

程序演示了如何使用 getchar()fgets()fgetc() 函数从标准输入读取数据。

  • 程序首先提示用户按下一个键,并使用 getchar() 读取这个按键字符,然后清除输入缓冲区中的换行符,并输出用户按下的字符。
  • 接着,程序提示用户输入一行文本,使用 fgets() 读取并存储到 buffer 数组中,同时去除末尾的换行符(如果存在),然后输出用户输入的文本。
  • 最后,程序再次提示用户按下另一个键,使用 fgetc() 读取这个按键字符,清除随后的换行符,并输出用户再次按下的字符。

程序的运行结果如下:


 

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

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

相关文章

Java | Leetcode Java题解之第202题快乐数

题目&#xff1a; 题解&#xff1a; class Solution {private static Set<Integer> cycleMembers new HashSet<>(Arrays.asList(4, 16, 37, 58, 89, 145, 42, 20));public int getNext(int n) {int totalSum 0;while (n > 0) {int d n % 10;n n / 10;totalS…

学习python笔记:10,requests,enumerate,numpy.array

requests库&#xff0c;用于发送 HTTP 请求的 Python 库。 requests 是一个用于发送 HTTP 请求的 Python 库。它使得发送 HTTP 请求变得简单且人性化。以下是一些基本的 requests 函数及其用途&#xff1a; requests.get(url, **kwargs) 发送一个 GET 请求到指定的 URL。 i…

Windows

电脑手动设置了IP后有两个IP地址如何处理 1. WinR 打开 cmd 2. netsh winsock reset catalog 3. netsh int ip reset reset.log 4. 重启 5. 手动配置IP地址 6. 查看IP状态时&#xff0c;就不会再出现自动分配的IPC# 获取当前登录的用户及组 using System.Security.Principal;v…

实现Spring Boot与RabbitMQ消息中间件的无缝集成

实现Spring Boot与RabbitMQ消息中间件的无缝集成 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01; 在分布式系统中&#xff0c;消息中间件扮演着至关重要的角色…

MySQL 复制技术详解

MySQL 复制技术用于在多个服务器之间同步数据&#xff0c;提高系统的可用性、可靠性和性能。本文将系统性地介绍三种主要的MySQL复制方式&#xff1a;主从复制&#xff08;Master-Slave Replication&#xff09;、主主复制&#xff08;Master-Master Replication&#xff09;、…

枫清科技创始人高雪峰:不取侥幸之利,做难而正确的事!丨数据猿专访

大数据产业创新服务媒体 ——聚焦数据 改变商业 金庸有一本著作叫做《侠客行》&#xff0c;这部武侠小说的主角叫做石破天&#xff0c;他从小的时候便跟随少林弟子习武。长大后&#xff0c;随着自己获得的感悟越来越多&#xff0c;最终选择开宗立派&#xff0c;独创一门武功行…

碧海威L7云路由无线运营版 confirm.php/jumper.php 命令注入漏洞复现(XVE-2024-15716)

0x01 产品简介 碧海威L7网络设备是 北京智慧云巅科技有限公司下的产品,基于国产化ARM硬件平台,采用软硬一体协同设计方案,释放出产品最大效能,具有高性能,高扩展,产品性能强劲,具备万兆吞吐能力,支持上万用户同时在线等高性能。其采用简单清晰的可视化WEB管理界面,支持…

React Hooks小记(十)_useCallback

useCallback 1. 语法格式 之前我们所学的 useMemo 能够达到缓存某个变量值的效果&#xff0c;而当前要学习的 useCallback 用来对组件内的函数进行缓存&#xff0c;它返回的是缓存的函数。它的语法格式如下&#xff1a; const memoCallback useCallback(cb, array)useCallb…

【ONLYOFFICE 8.1】的安装与使用——功能全面的 PDF 编辑器、幻灯片版式、优化电子表格的协作

&#x1f525; 个人主页&#xff1a;空白诗 文章目录 一、引言二、ONLYOFFICE 简介三、安装1. Windows/Mac 安装2. 文档开发者版安装安装前准备使用 Docker 安装使用 Linux 发行版安装配置 ONLYOFFICE 文档开发者版集成和开发 四、使用1. 功能全面的 PDF 编辑器PDF 查看和导航P…

小公司做自动化的困境

1. 人员数量不够 非常常见的场景, 开发没几个, 凭什么测试要那么多, 假设这里面有3个测试, 是不是得有1个人会搞框架? 是不是得有2人搞功能测试, 一个人又搞框架, 有些脚本, 真来得及吗? 2. 人员基础不够 现在有的大公司, 是这样子协作的, 也就是某模块需求谁谁测试的, 那么…

【高级篇】性能优化:解锁数据库潜能的艺术(十)

引言 随着基础篇的结束,我们进入了MySQL高级篇的旅程,首站便是性能优化。在当今数据驱动的世界里,数据库的性能直接影响着应用的响应速度和用户体验。本章,我们将深入探讨查询优化、服务器参数调整、InnoDB引擎调优以及慢查询日志分析等关键领域,帮助你掌握解锁数据库潜能…

GEOS学习笔记(三)

LineString类型GEOS_LINESTRING double line[] {-100.0,0.0, 100.0,0.0}; GEOSCoordSequence* seq GEOSCoordSeq_copyFromBuffer( line, 2, 0, 0); GEOSGeometry* p1 GEOSGeom_createLineString(seq); GEOSGeometry* p2 GEOSGeomFromWKT("LINESTRING (100 -100.0,100.0…

交易例子----qmt实盘分钟交易例子,提供交易源代码

今天给大家一个利用qmt_trader交易策略&#xff0c;我现在实盘使用的系统是自己开发的&#xff0c;只需要把qmt_trader当中第三方库使用就可以&#xff0c;源代码开源开源直接下载 量化系统--开源强大的qmt交易系统&#xff0c;提供源代码 参考教程使用&#xff0c;下载当第三…

ONLYOFFICE桌面编辑器8.1版:个性化编辑和功能强化的全面升级

ONLYOFFICE是一款全面的办公套件&#xff0c;由Ascensio System SIA开发。该软件提供了一系列与微软Office系列产品相似的办公工具&#xff0c;包括处理文档&#xff08;ONLYOFFICE Document Editor&#xff09;、电子表格&#xff08;ONLYOFFICE Spreadsheet Editor&#xff0…

Ubuntu Nvidia GPU驱动安装和故障排除

去官网 菜单列表下载&#xff0c;或者直接下载驱动 wget https://cn.download.nvidia.com/XFree86/Linux-x86_64/550.54.14/NVIDIA-Linux-x86_64-550.54.14.run 安装驱动 /data/install/NVIDIA-Linux-x86_64-550.54.14.run 执行命令&#xff0c;显示GPU情况 出错处理&…

【深度学习】tensorboard的使用

目前正在写一个训练框架&#xff0c;需要有以下几个功能&#xff1a; 1.保存模型 2.断点继续训练 3.加载模型 4.tensorboard 查询训练记录的功能 命令&#xff1a; tensorboard --logdirruns --host192.168.112.5 效果&#xff1a; import torch import torch.nn as nn impor…

java 利用poi读取wps嵌入式图片,自测

代码 主要工具类 需要引入依赖&#xff1a; mvn install:install-file -DfileC:\Users\18151\Downloads\apache-xmlbeans-bin-5.2.1-20240522\apache-xmlbeans-5.2.1\bin\xmltypes.jar -DgroupIdcn.wps -DartifactIdofficeDocument -Dversion1.0 -Dpackagingjar<dependen…

视频网站系统

摘 要 随着互联网的快速发展和人们对视频内容的需求增加&#xff0c;视频网站成为了人们获取信息和娱乐的重要平台。本论文基于SpringBoot框架&#xff0c;设计与实现了一个视频网站系统。首先&#xff0c;通过对国内外视频网站发展现状的调研&#xff0c;分析了视频网站的背景…

React@16.x(41)路由v5.x(6)常见应用场景(3)- 实现导航守卫

目录 1&#xff0c;简单实现1.1&#xff0c;监听1.2&#xff0c;控制跳转 2&#xff0c;全局封装3&#xff0c;阻止跳转 vue-router 中的导航守卫 router.beforeEach 有2个作用&#xff1a; 监听路由跳转&#xff1b;控制路由是否可以跳转。 在 React 中可以模拟实现。 1&am…

一站式uniapp优质源码项目模版交易平台的崛起与影响

一、引言 随着信息技术的飞速发展&#xff0c;软件源码已成为推动行业进步的重要力量。源码的获取、交易和流通&#xff0c;对于开发者、企业以及项目团队而言&#xff0c;具有极其重要的意义。为满足市场对高质量源码资源的迫切需求&#xff0c;一站式uniapp优质源码项目模版…