sscanf与sprintf函数
创始人
2024-03-15 07:13:02
0

在这里插入图片描述
本期介绍🍖
主要介绍:scanf()、printf()、fscanf()、fprintf()、sscanf()、sprintf()这三对输入/输出函数的区别,而且详细讲解了sscanf()、sprintf()这两个函数的应用场景👀。


概述🍖

  在C语言的输出和输入库中,有三对及其相似的库函数:printf()scanf()fprintf()fscanf()sprintf()sscanf()。它们实现不同的功能,但会经常被搞混。接下来我就带着大家区分一下这些函数。


详解🍖

  首先,我们最熟悉的因该是scanf()printf(),是针对标准输入(输出)流的函数,也就是默认输入是从键盘上读取的数据、输出是向屏幕上输出数据的。函数的类型如下图所示:

  1. int scanf( const char *format [,argument]… );
  2. int printf( const char *format [, argument]… );

  接着,相对比较熟悉的是,之前在文件操作这章所学的fscanf()fprintf(),这是一对针对于所有输入(输出)流的格式化输入(输出)函数,也就是说你可以用这一对函数对所有的外部设备进行输入(输出)操作,前提是你能提供该外部设备所对应的“”。函数的类型如下所示:

  1. int fscanf( FILE *stream, const char *format [, argument ]… );
  2. int fprintf( FILE *stream, const char *format [, argument ]…);

  最后,还需要讲解一对输入(输出)函数sscanf()sprintf()。相较于前两对函数而言sscanf()sprintf() 并不用于与外部设备之间进行数据传输,而是用于实现数据与字符串之间的转换。函数格式如下所示:

在这里插入图片描述

sprintf() :将一个格式化的数据,转化成字符串。
格式: int sprintf( char *buffer, const char *format [, argument] … );

  其中sprintf()的第一个参数char* buffer是一个字符指针,指向用于存放数据转换后字符串的字符数组,第二个参数const char *format [, argument] ... printf() 中参数的用法一致。下面举个例子:

#includestruct 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() 中参数的用法一致。下面举个例子:

#includestruct 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()这样的函数,将数组转换成字符串然后传递给前端。如下图所示:

在这里插入图片描述


在这里插入图片描述

这份博客👍如果对你有帮助,给博主一个免费的点赞以示鼓励欢迎各位🔎点赞👍评论收藏⭐️,谢谢!!!
如果有什么疑问或不同的见解,欢迎评论区留言欧👀。

相关内容

热门资讯

AWSECS:访问外部网络时出... 如果您在AWS ECS中部署了应用程序,并且该应用程序需要访问外部网络,但是无法正常访问,可能是因为...
AWSElasticBeans... 在Dockerfile中手动配置nginx反向代理。例如,在Dockerfile中添加以下代码:FR...
银河麒麟V10SP1高级服务器... 银河麒麟高级服务器操作系统简介: 银河麒麟高级服务器操作系统V10是针对企业级关键业务...
北信源内网安全管理卸载 北信源内网安全管理是一款网络安全管理软件,主要用于保护内网安全。在日常使用过程中,卸载该软件是一种常...
AWR报告解读 WORKLOAD REPOSITORY PDB report (PDB snapshots) AW...
AWS管理控制台菜单和权限 要在AWS管理控制台中创建菜单和权限,您可以使用AWS Identity and Access Ma...
​ToDesk 远程工具安装及... 目录 前言 ToDesk 优势 ToDesk 下载安装 ToDesk 功能展示 文件传输 设备链接 ...
群晖外网访问终极解决方法:IP... 写在前面的话 受够了群晖的quickconnet的小水管了,急需一个新的解决方法&#x...
不能访问光猫的的管理页面 光猫是现代家庭宽带网络的重要组成部分,它可以提供高速稳定的网络连接。但是,有时候我们会遇到不能访问光...
Azure构建流程(Power... 这可能是由于配置错误导致的问题。请检查构建流程任务中的“发布构建制品”步骤,确保正确配置了“Arti...