嵌入式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…

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

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

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

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

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

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

交易例子----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…

视频网站系统

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

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

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

激光雷达数据处理

激光雷达技术以其高精度、高效率的特点&#xff0c;已经成为地表特征获取、地形建模、环境监测等领域的重要工具。掌握激光雷达数据处理技能&#xff0c;不仅可以提升工作效率&#xff0c;还能够有效提高数据的质量和准确性&#xff0c;为决策提供可靠的数据支持。 第一章、激…

Spring自带的持久层模板类:JdbcTemplate+Spring框架声明式事务管理实战

模板技术 Spring框架中提供了很多模板类来简化编程&#xff0c;使用模板类编写程序会变的简单 持久层模板JdbcTemplate JdbcTemplate是什么 JDBCTemplate是Spring Framework中的一个核心类&#xff0c;用于简化JDBC&#xff08;Java数据库连接&#xff09;代码的编写。它提供…

SQLite、MySQL、PostgreSQL 3个关系数据库之间优缺点对比

引言 关系数据模型以行和列的表格形式组织数据&#xff0c;在数据库管理工具中占主导地位。今天还有其他数据模型&#xff0c;包括NoSQL和NewSQL&#xff0c;但是关系数据库管理系统&#xff08;RDBMS&#xff09;仍然占主导地位用于存储和管理全球数据。 本文比较了三种实现最…

mac菜单栏应用管理软件:Bartender 4 for Mac 中文激活版

Bartender 4 是一款由Bearded Men Games开发的适用于Mac操作系统的应用程序&#xff0c;它被设计用来优化和美化Mac菜单栏的功能。自从macOS Big Sur开始&#xff0c;Mac的菜单栏可以自定义&#xff0c;用户可以添加和移除各种图标。Bartender 4就是在这个背景下应运而生&#…

Redis高可用(主从复制、哨兵模式)详解

Redis高可用&#xff08;主从复制、哨兵模式&#xff09;详解 Redis是一种高性能的键值存储系统&#xff0c;能够通过多种机制来实现高可用性&#xff0c;这些机制主要包括主从复制&#xff08;Replication&#xff09;和哨兵模式&#xff08;Sentinel&#xff09;。 Redis 主…

js,uni 自定义 时间选择器 vue2

<template><view class"reserve-time-box"><view class"title">选择时间</view><view class"date-box"><view class"date-scroll-box" :style"{ width : ${dataTimeWidth}rpx }"><v…

Node.js下载及安装详细教程

目录 Node.js安装详细教程 下载安装环境变量配置文件结构配置npm在安装全局模块时的路径和缓存cache的路径测试常见命令 Node.js安装详细教程 &#x1f441;官网下载地址:Download | Node.js (nodejs.org) 下载速度慢的话 可以使用网盘下载&#xff1a; https://pan.quark.…

自然语言处理基本知识(1)

一 分词基础 NLP:搭建了计算机语言和人类语言之间的转换 1 精确分词&#xff0c;试图将句子最精确的分开&#xff0c;适合文本分析 >>> import jieba >>> content "工信处女干事每月经过下属科室" >>> jieba.cut(content,cut_all …

TCP、UDP详解

目录 1.区别 1.1 概括 1.2 详解 2.TCP 2.1 内容 2.2 可靠传输 2.2.1 确认应答 2.2.2 超时重传 2.2.3 连接管理 三次握手 四次挥手 2.2.4 滑动窗口 2.2.5 流量控制 2.2.6 拥塞控制 2.2.7 延时应答 2.2.8 捎带应答 2.2.9 面向字节流 2.2.10 异常情况的处理 1.…

通达信短线抄底主升浪幅图指标公式源码

通达信短线抄底主升浪幅图指标公式源码&#xff1a; A1:REF(C,1); A2:SMA(MAX(C-A1,0),5,1)/SMA(ABS(C-A1),5,1)*1000; A3:BARSLAST(REF(CROSS("RSI.RSI1"(6,12,24),"RSI.RSI2"(6,12,24)),1)); A4:A2-LLV(A2,10); A5:(MA(A4,2)*3A4*13)/16; A6:IF(A5>1…