sscanf与sprintf函数

本期介绍🍖
主要介绍:sscanf()、sprintf()这对输入/输出函数,并详细讲解了这两个函数的应用场景。
概述🍖
在C语言的输出和输入库中,有三对及其相似的库函数:printf()、scanf()、fprintf()、fscanf()、sprintf()、sscanf()。它们实现不同的功能,但会经常被搞混。接下来我就带着大家区分一下这些函数。
详解🍖
scanf() 和 printf()是针对于标准输入(输出)流的格式化输入(输出)函数,也就是默认输入是从键盘上读取的数据、输出是向屏幕上输出数据的。函数的类型声明如下所示:
int scanf( const char *format [,argument]... );
int printf( const char *format [, argument]... );
fscanf()和fprintf()是针对于所有输入(输出)流的格式化输入(输出)函数,也就是说你可以用这一对函数对所有的外部设备进行输入(输出)操作,前提是你能提供该外部设备所对应的“流”。函数的类型声明如下所示:
int fscanf( FILE *stream, const char *format [, argument ]... );
int fprintf( FILE *stream, const char *format [, argument ]...);
相较于前两对函数而言sscanf()和 sprintf()并不是用于外部设备之间进行数据传输,而是实现格式化数据与字符串之间的转换。函数格式如下所示:

sprintf() :将一个格式化的数据,转化成字符串。
int sprintf( char *buffer, const char *format [, argument] ... );
其中sprintf()的第一个参数char* buffer是一个字符指针,指向用于存放数据转换后字符串的字符数组,第二个参数const char *format [, argument] ... 与printf() 中参数的用法一致。下面举个例子:
#include<stdio.h>struct S
{char name[20];int age;float score;
};int main()
{struct S s = { "zhangsan",23,56.1 };char arr[100] = { 0 };sprintf(arr, "%s %d %f", s.name, s.age, s.score);printf("%s\n", arr);return 0;
}

sscanf() :从一个字符串中,转化出格式化的数据。
int sscanf( const char *buffer, const char *format [, argument ] ... );
其中sscanf()的第一个参数char* buffer是一个字符指针,指向需要被转换成格式化数据的字符数组,第二个参数const char *format [, argument] ... 与scanf() 中参数的用法一致。下面举个例子:
#include<stdio.h>struct S
{char name[20];int age;float score;
};int main()
{struct S s = { "zhangsan",23,56.1 };char arr[100] = { 0 };struct S save = { 0 };sprintf(arr, "%s %d %f", s.name, s.age, s.score);printf("%s\n", arr);sscanf(arr, "%s %d %f", save.name, &(save.age), &(save.score));printf("%s %d %f\n", save.name, save.age, save.score);return 0;
}

应用场景🍖
思考一个问题:这两个函数的设计的目的是什么呀?谁会平白无故让数据的转化成字符串,从字符串中读取数据,这不多此一举嘛?
当然这么想无可厚非,因为你还没有深入的了解前端数据的存储形式,前端与后端之间数据的传输,当学习的代码越来越多,见识越来越广的时候,自然而然就明白了。
当想开发一个应用软件的时候,需要使用BS结构,也就是浏览器、服务器结构。当前端页面获取信息的时候,是以字符串的形式获取的,就譬如:“姓名” “年龄” “体重”。然后会进行组合,组合成一个字符串,譬如:“姓名 年龄 体重”。最终将这个字符串传递给后端,后端可能是以结构的形式存储的,所以就需要用到像sscanf()这样的函数,从字符串中读取数据。同样的如果我们想将后端的数据呈现到前端页面上去,就需要通过像sprintf()这样的函数,将数组转换成字符串然后传递给前端。如下图所示:

这种操作在专业的软件开发中被称为:序列化和反序列化。

这份博客👍如果对你有帮助,给博主一个免费的点赞以示鼓励欢迎各位🔎点赞👍评论收藏⭐️,谢谢!!!
如果有什么疑问或不同的见解,欢迎评论区留言欧👀。
相关文章:
sscanf与sprintf函数
本期介绍🍖 主要介绍:sscanf()、sprintf()这对输入/输出函数,并详细讲解了这两个函数的应用场景。 概述🍖 在C语言的输出和输入库中,有三对及其相似的库函数:printf()、scanf()、fprintf()、fscanf()、spri…...
【k8s】创建基于sa的token的kubeconfig
需求 创建一个基于sa的token的kubeconfig文件,并用这个文件来访问集群。 具体创建sa 和sa的token请参考文章: 【k8s】给ServiceAccount 创建关联的 Secrets-CSDN博客 创建sa apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata:namespace: jtkjdevnam…...
Gentoo Linux部署LNMP
一、安装nginx 1.gentoo-chxf ~ # emerge -av nginx 提示配置文件需更新 2.gentoo-chxf ~ # etc-update 3.gentoo-chxf ~ # emerge -av nginx 4.查看并启动nginx gentoo-chxf ~ # systemctl status nginx gentoo-chxf ~ # systemctl start nginx gentoo-chxf ~ # syst…...
2411C++,CXImage简单使用
介绍 CxImage是一个可非常简单快速的加载,保存,显示和转换图像的C类. 文件格式和链接的C库 Cximage对象基本上是加了一些成员变量来保存有用信息的一个位图: class CxImage{...protected:void* pDib; //包含标题,调色板,像素BITMAPINFOHEADER head; //标准头文件CXIMAGEINFO…...
什么是 Kubernetes(K8s)?
什么是 Kubernetes(K8s)? Kubernetes(简称 K8s) 是一个用来管理容器的开源工具,它可以自动化部署、扩展和管理容器化应用。简单来说,K8s 就是一个“容器管家”,负责确保你的应用程序…...
深入解析:TypeScript 与 Vue 的完美结合
文章目录 前言一、准备工作二、基本用法三、进阶主题结语 前言 Vue.js 是一款流行的渐进式 JavaScript 框架,它以易于学习和灵活的特性而闻名。TypeScript 则是 JavaScript 的一个超集,它引入了静态类型检查等高级功能,有助于构建更大型且复…...
机器学习周志华学习笔记-第13章<半监督学习>
机器学习周志华学习笔记-第13章<半监督学习> 卷王,请看目录 13半监督学习13.1 生成式方法13.2 半监督SVM13.3 基于分歧的方法13.4 半监督聚类 13半监督学习 前面我们一直围绕的都是监督学习与无监督学习,监督学习指的是训练样本包…...
软件工程——期末复习(1)
名词解释: 名词解释--人月 答案:人月是软件开发工作量的单位,1人月表示1个程序员1个月的工作时间所开发的代码量。 请解释软件缺陷、错误和失败,并简单举例说明。 答案:缺陷(defect)指系统代…...
【JavaEE初阶 — 网络编程】实现基于TCP协议的Echo服务
TCP流套接字编程 1. TCP & UDP 的区别 TCP 的核心特点是面向字节流,读写数据的基本单位是字节 byte 2 API介绍 2.1 ServerSocket 定义 ServerSocket 是创建 TCP 服务端 Socket 的API。 构造方法 方法签名 方法说明 ServerS…...
vue结合canvas动态生成水印效果
在 Vue 项目中添加水印可以通过以下几种方式实现: 方法一:使用 CSS 直接通过 CSS 的 background 属性实现水印: 实现步骤 在需要添加水印的容器中设置背景。使用 rgba 设置透明度,并通过 background-repeat 和 background-size…...
Qt 5 中的 QTextStream 使用指南
文章目录 Qt 5 中的 QTextStream 使用指南介绍基本概念读取文件注意事项结论 Qt 5 中的 QTextStream 使用指南 介绍 QTextStream 是 Qt 框架中用于处理文本数据的类。它提供了方便的接口来读写文本文件或字符串,支持多种编码格式,并且可以与 QIODevice…...
中安证件OCR识别技术助力鸿蒙生态:智能化证件识别新体验
在数字化和智能化的浪潮中,伴随国产化战略的深入推进,国产操作系统和软件生态的建设逐渐走向成熟。鸿蒙操作系统(HarmonyOS Next)作为华为推出的重要操作系统,凭借其开放、灵活和高效的特点,正在加速在多个…...
SpringBoot 框架下基于 MVC 的高校办公室行政事务管理系统:设计开发全解析
2系统开发环境 2.1vue技术 Vue (读音 /vjuː/,类似于 view) 是一套用于构建用户界面的渐进式JavaScript框架。 [5] 与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用。Vue 的核心库只关注视图层,不仅易于上手,还便于与第…...
【ArkTS】使用AVRecorder录制音频 --内附录音机开发详细代码
系列文章目录 【ArkTS】关于ForEach的第三个参数键值 【ArkTS】“一篇带你读懂ForEach和LazyForEach” 【小白拓展】 【ArkTS】“一篇带你掌握TaskPool与Worker两种多线程并发方案” 【ArkTS】 一篇带你掌握“语音转文字技术” --内附详细代码 【ArkTS】技能提高–“用户授权”…...
Selenium3+Python如何操作键盘
selenium操作键盘,需要导入Keys类:“from selenium.webdriver.common.keys import Keys” 调用键盘操作的快捷键的方法 : 单键值:直接传入对应的键值“element.send_keys”(快捷键的键值) 组合键:键值之间由逗号分隔…...
PLC协议
PLC协议通常指的是可编程逻辑控制器(Programmable Logic Controller, PLC)与其他设备之间通信时所使用的协议。PLC广泛应用于工业自动化领域,用于控制和监控设备。不同厂商和应用场景可能使用不同的通信协议。 常见的PLC通信协议 1. Modbus …...
C_字符串的一些函数
1.字符串输入函数 scanf("%s",数组名); gets(数组名); 区别: scanf(“%s”,数组名); 把空格识别为输入结束 #include <stdio.h>int main() {char a[10];printf("输入:");scanf("%s",a)…...
使用Native AOT发布C# dll 提供给C++调用
Native AOT,即提前本地编译(Ahead-Of-Time Compilation),是一种将托管代码(如 C#)编译为本机可执行文件的技术,无需在运行时进行任何代码生成。 (Native AOT 优缺点截图摘自张善友博…...
Git 提交代码日志信息
前言 在项目中经常用到git提交代码,每次提交时需要添加日志信息,那么一套规范的日志信息会让整个git仓库看起来赏心悦目! 以下是Git 提交代码日志信息的建议: 一、格式规范 标题(Subject) 标题是日志信息中…...
Request method ‘POST‘ not supported(500)
前端路径检查 查看前端的请求路径地址、请求类型、方法名是否正确,结果没问题 后端服务检查 查看后端的传参uri、传参类型、方法名,结果没问题 nacos服务名检查 检查注册的服务是否对应(我这里是后端的服务名是‘ydlh-gatway’,服务列表走…...
AI辅助开发:利用快马多模型AI为9·1免费素材网站添加智能搜索与推荐
AI辅助开发:利用快马多模型AI为91免费素材网站添加智能搜索与推荐 最近在做一个免费素材网站的项目,需要为91免费素材平台添加智能搜索和推荐功能。传统的关键词搜索已经不能满足用户需求了,特别是对于设计素材这种视觉化内容。正好发现了In…...
新手福音:无需下载安装,在快马平台直接上手体验wsl开发
作为一个刚接触WSL的新手,最头疼的就是漫长的下载安装过程。记得我第一次尝试在Windows上安装WSL时,光是等待wsl --install命令完成就花了近一个小时,中间还因为网络问题失败了好几次。这种体验对初学者来说真的很劝退。 后来我发现了一个更简…...
别只训练了!聊聊LSTM翻译模型保存的那些事儿:.h5权重、字符字典与config.json
LSTM翻译模型工程化实战:从权重保存到完整资产包的深度解析 当你花了三天三夜训练出一个效果不错的LSTM翻译模型,看着验证集上的BLEU分数终于突破30,正准备松口气时——突然意识到这个模型可能永远走不出你的Jupyter Notebook。这不是危言耸听…...
利用快马AI快速生成STM32温湿度监测系统原型,验证核心逻辑
今天想和大家分享一个嵌入式开发中的实用技巧——如何用InsCode(快马)平台快速搭建STM32温湿度监测系统的原型。这个案例特别适合需要验证硬件逻辑但手头没有开发板的情况。 为什么需要快速原型开发 在传统嵌入式开发中,我们经常遇到这样的困境:硬件还…...
Ryujinx模拟器:从零到精通的高效配置终极指南
Ryujinx模拟器:从零到精通的高效配置终极指南 【免费下载链接】Ryujinx 用 C# 编写的实验性 Nintendo Switch 模拟器 项目地址: https://gitcode.com/GitHub_Trending/ry/Ryujinx 想在个人电脑上体验任天堂Switch游戏的魅力吗?Ryujinx作为一款用C…...
探索无桥PFC与逆变方案:从原理到实现
无桥PFC和逆变方案(原理图pdfPCBstm源码两份仿真等文件) 1.输入电压AC220V,50Hz交流电 2.PFC输出390V,150KHz开关频率 3.PFC输出最大功率400瓦,输入电流最大2A,最小负载电流0.1A 输出功率越大PF值越高,电流…...
YimMenu终极指南:GTA5增强工具完整使用教程
YimMenu终极指南:GTA5增强工具完整使用教程 【免费下载链接】YimMenu YimMenu, a GTA V menu protecting against a wide ranges of the public crashes and improving the overall experience. 项目地址: https://gitcode.com/GitHub_Trending/yi/YimMenu Y…...
stm32零基础入门:用快马生成第一个按键控制led项目
最近在学STM32开发,发现环境配置和库版本兼容问题特别劝退新手。好在发现了InsCode(快马)平台,用它生成的STM32按键控制LED项目帮我跳过了最头疼的配置环节,分享下这个零基础入门的实践过程。 项目需求分析 最简单的硬件交互就是按键控制LED&…...
快速原型实践:利用快马AI一键生成正版软件9.1自动化安装脚本
快速原型实践:利用快马AI一键生成正版软件9.1自动化安装脚本 最近在帮朋友部署一个数据分析环境,需要批量安装正版软件9.1版本。手动安装不仅耗时,还容易出错。于是我开始研究如何用Python写一个自动化安装脚本,没想到在InsCode(…...
准比例谐振控制器:从理想模型到工程实践的带宽调优
1. 准比例谐振控制器的核心原理 准比例谐振控制器(Quasi-Proportional Resonant Controller)是电力电子领域广泛使用的一种控制策略,特别适用于并网逆变器、有源滤波器等需要精确跟踪特定频率信号的场景。它的核心思想是在目标频率点…...
