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()
这样的函数,将数组转换成字符串然后传递给前端。如下图所示:
这种操作在专业的软件开发中被称为:序列化和反序列化。
这份博客👍如果对你有帮助,给博主一个免费的点赞以示鼓励欢迎各位🔎点赞👍评论收藏⭐️,谢谢!!!
如果有什么疑问或不同的见解,欢迎评论区留言欧👀。