【C语言 | 字符串处理】sscanf 详细介绍、使用说明以及使用例子源码

😁博客主页😁:🚀https://blog.csdn.net/wkd_007🚀
🤑博客内容🤑:🍭嵌入式开发、Linux、C语言、C++、数据结构、音视频🍭
⏰发布时间⏰:2024-05-08 15:40:38

本文未经允许,不得转发!!!

目录

  • 🎄一、概述
  • 🎄二、sscanf 函数介绍
  • 🎄三、sscanf 函数使用例子
    • ✨3.1 sscanf 函数解析字符串
    • ✨3.2 sscanf 函数解析数字
  • 🎄四、总结


在这里插入图片描述

在这里插入图片描述

🎄一、概述

在Linux的man手册是这样介绍 sscanf 系列函数的:

scanf()函数族根据如下所述的格式扫描输入。此格式可能包含转换规范;这种转换的结果(如果有的话)存储在遵循格式的指针参数所指向的位置。每个指针参数的类型必须适合相应转换规范返回的值。
如果格式中转换规范的数量超过指针参数的数量,则结果是未定义的。如果指针参数的数量超过转换规范的数量,则会计算多余的指针参数,但在其他情况下会被忽略。

在C语言日常编程中,常常会使用sscanf来解析字符串,将字符串中特定的数字、字符串解析到指定的内存(变量)中。


在这里插入图片描述

🎄二、sscanf 函数介绍

sscanf 函数原型:

#include <stdio.h>
int scanf(const char *format, ...);
int fscanf(FILE *stream, const char *format, ...);
int sscanf(const char *str, const char *format, ...);
  • 函数介绍:sscanf 函数定义在 <stdio.h> 头文件中,它的功能是从str参数指定的字符串,按照format参数指定的格式获取数据;与其功能类似的还有scanf、fscanf,scanf是从标准输入按照格式获取数据,fscanf是从指定的文件按照格式获取数据。
  • 函数参数:
    • str:指定要获取数据的源字符串,也就是要解析的字符串;
    • format:格式字符串。指定了要匹配的格式规则。格式字符串由一系列指令组成,这些指令描述了如何处理输入字符序列。如果指令处理失败,则不再读取进一步的输入,sscanf()将返回。“失败”可以是以下任意一种:输入失败,意味着输入字符不可用,或者匹配失败,意味着您的输入不合适。
    • ...:可变参数列表,用于接收解析后的数据。
  • 返回值:sscanf 函数返回成功解析的数据项的个数。如果解析失败或没有匹配的数据项,则返回0。

format 参数常用的指令是:以“%”(百分比)字符开头。根据此规范转换输入中的字符序列,并将结果放入相应的指针参数中。如果下一个输入项与转换规范不匹配,则转换失败——这是匹配失败。

常用的格式字符串如下:

  • %%:匹配百分号字符“%”。也就是说,格式字符串中的%%与单个输入“%”字符匹配。不会进行任何转换(但会丢弃初始空白字符),也不会进行赋值。
  • %d:匹配一个可选的带符号的十进制整数;下一个指针必须是指向int的指针。
  • %u:匹配一个无符号十进制整数;下一个指针必须是指向无符号int的指针。
  • %f:匹配一个可选的带符号浮点数;下一个指针必须是要浮动的指针。
  • %x:匹配一个无符号的十六进制整数;下一个指针必须是指向无符号int的指针。
  • %c:匹配长度由最大字段宽度(默认值为1)指定的字符序列;下一个指针必须是指向char的指针,并且必须有足够的空间容纳所有字符(不添加终止的空字节)。通常跳过前导空白被抑制。要先跳过空白,请在格式中使用显式空格。
  • %s:匹配非空白字符序列;下一个指针必须是指向字符数组的初始元素的指针,该元素的长度足以容纳输入序列和自动添加的终止空字节(“\0”)。输入字符串停止在空白处或最大字段宽度处,以先出现的为准。

在这里插入图片描述

🎄三、sscanf 函数使用例子

使用 sscanf 函数的用法主要有两种:一是从输入字符串中解析出想要的字符串;二是从输入字符串中解析出想要的数字。

✨3.1 sscanf 函数解析字符串

解析简单字符串:下面例子可以将输入字符串存到str中:

char str[64] = {0, };
sscanf("hello , world", "%s", str);

解析稍微复杂的字符串,将输入字符串从逗号分开成两个字符串存在str1,str2:

char str1[64] = {0, };
char str2[64] = {0, };
int  num = 0;
sscanf("hello , world ! 123", "%s , %s ! %d", str1, str2, &num);

解析更复杂的字符串,获取输入字符串中两个百分号(%)之间的字符串:

char str_mid[64] = {0,};
sscanf("%hello,world! %123", "%%%s%%123", str_mid);

注意sscanf 函数解析字符串时在格式字符串会使用%s,而%s会将输入字符串一直匹配,直到出现空白字符或已经达到字符串最大匹配长度。


✨3.2 sscanf 函数解析数字

解析整数

int i;
sscanf("123", "%d", &i);

解析浮点数

float f;
sscanf("1.23", "%f", &f);

解析复杂字符串的数字,下面是从输入字符串,解析出IP地址和Mac地址的值:

unsigned char ucIp[4] = {0,};
sscanf("192.168.1.100", "%u.%u.%u.%u", (unsigned int*)(ucIp+0),
         (unsigned int*)(ucIp+1), (unsigned int*)(ucIp+2), (unsigned int*)(ucIp+3));

unsigned char mac[6] = {0,};
sscanf("ec:d6:8a:29:8d:0a", "%02x:%02x:%02x:%02x:%02x:%02x",(unsigned int*)(mac+0),
         (unsigned int*)(mac+1),(unsigned int*)(mac+2),(unsigned int*)(mac+3),
         (unsigned int*)(mac+4),(unsigned int*)(mac+5));

上述例子完整C语言代码:

// sscanf.c
// gcc sscanf.c 
#include <stdio.h>

int main()
{
        char str[64] = {0, };
        sscanf("hello , world", "%s", str);
        printf("str=[%s]\n", str);

        char str1[64] = {0, };
        char str2[64] = {0, };
        int  num = 0;
        sscanf("hello , world ! 123", "%s , %s ! %d", str1, str2, &num);
        printf("str1=[%s], str2=[%s] num=%d\n", str1, str2, num);

        char str_mid[64] = {0,};
        sscanf("%hello,world! %123", "%%%s%%123", str_mid);
        printf("str_mid=[%s]\n", str_mid);

        int i;
        sscanf("123", "%d\n", &i);
        printf("i=%d", i);

        float f;
        sscanf("1.23", "%f\n", &f);
        printf("f=%f\n", f);

        unsigned char ucIp[4] = {0,};
        sscanf("192.168.1.100", "%u.%u.%u.%u", (unsigned int*)(ucIp+0),
                (unsigned int*)(ucIp+1), (unsigned int*)(ucIp+2), (unsigned int*)(ucIp+3));
        printf("%u.%u.%u.%u\n", ucIp[0], ucIp[1], ucIp[2], ucIp[3]);

        unsigned char mac[6] = {0,};
        sscanf("ec:d6:8a:29:8d:0a", "%02x:%02x:%02x:%02x:%02x:%02x",(unsigned int*)(mac+0),
                (unsigned int*)(mac+1),(unsigned int*)(mac+2),(unsigned int*)(mac+3),
                (unsigned int*)(mac+4),(unsigned int*)(mac+5));

        int j = 0;
        for(j=0; j<6; j++)
        {
                printf("%02x:", mac[j]);
        }
        printf("\n");
        return 0;
}

在这里插入图片描述

🎄四、总结

👉本文详细介绍了C语言解析字符串常用的sscanf函数,并给出了使用该函数解析字符串的例子。

在这里插入图片描述
如果文章有帮助的话,点赞👍、收藏⭐,支持一波,谢谢 😁😁😁

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Python爬虫】使用request和xpath爬取高清美女图片

&#x1f4dd;个人主页&#xff1a;哈__ 期待您的关注 目录 &#x1f388; urlib.request &#x1f525;具体的方法 ✈ lxml &#x1f525;xpath的基本语法 1. 基本路径 2. 选择节点 3. 谓语&#xff08;Predicates&#xff09; 4. 通配符 5. 选择多个路径 6. 函数 …

OV证书——企业网站的第一选择

据官方数据统计&#xff0c;从2024年开始OV证书的签发量远远超过DV证书的签发量&#xff0c;越来越多的企业网站摒弃了基础的DV证书&#xff0c;选择更高级别的OV证书。 但是其价格相对于DV证书来说要高几百甚至上千元&#xff0c;这里推荐性价比很高的JoySSL&#xff0c;他们…

邦注科技给您解答 什么是注塑机模具保护器

模具监视器&#xff0c;这位制造业的守护神&#xff0c;时刻注视着模具的每一个细微变化。它的工作原理如同一位细心的侦探&#xff0c;利用传感器、数据采集系统和监控软件组成的精良装备&#xff0c;探寻模具的秘密。 传感器如同模具的耳目&#xff0c;敏锐地捕捉着模具的温度…

Elasticsearch的使用

Elasticsearch 1、认识和安装 Elasticsearch的官方网站如下&#xff1a; https://www.elastic.co/cn/elasticsearch Elasticsearch是由elastic公司开发的一套搜索引擎技术&#xff0c;它是elastic技术栈中的一部分。完整的技术栈包括&#xff1a; Elasticsearch&#xff1…

Ps 滤镜:渲染

Ps菜单&#xff1a;滤镜/渲染 Filter/Render “渲染”子菜单中的滤镜主要用于生成或模拟各种自然和抽象的视觉效果&#xff0c;这些效果通常很难通过传统的摄影或手绘技术实现。这类滤镜能够为设计师和艺术家提供强大的工具&#xff0c;以增强图像的视觉冲击力、创造性或实现特…

11.偏向锁原理及其实战

文章目录 偏向锁原理及其实战1.偏向锁原理2.偏向锁案例代码演示2.1.偏向锁案例代码2.2.1.无锁情况下状态2.1.2.偏向锁状态2.1.3.释放锁后的状态 2.2.偏向锁的膨胀和撤销2.2.1.偏向锁撤销的条件2.2.2.偏向锁的撤销 2.2.3.偏向锁的膨胀 2.3.全局安全点原理和偏向锁撤销性能问题2.…

Electron项目中将CommonJS改成使用ES 模块(ESM)语法preload.js加载报错

问题 将Electron项目原CommonJS语法改成使用ES 模块&#xff08;ESM&#xff09;语法&#xff0c;preload.js一直加载不到&#xff0c;报错如下&#xff1a; VM111 renderer_init:2 Unable to load preload script: D:\Vue\wnpm\electron\preload.js VM111 renderer_init:2 E…

今日刷三题(day11):不同路径的数目(一)+短距离最小路径和+把数字翻译成字符串

题目一&#xff1a;不同路径的数目&#xff08;一&#xff09; 题目描述&#xff1a; 一个机器人在mn大小的地图的左上角&#xff08;起点&#xff09;。机器人每次可以向下或向右移动。机器人要到达地图的右下角&#xff08;终点&#xff09;。可以有多少种不同的路径从起点…

全栈开发之路——前端篇(6)生命周期和自定义hooks

全栈开发一条龙——前端篇 第一篇&#xff1a;框架确定、ide设置与项目创建 第二篇&#xff1a;介绍项目文件意义、组件结构与导入以及setup的引入。 第三篇&#xff1a;setup语法&#xff0c;设置响应式数据。 第四篇&#xff1a;数据绑定、计算属性和watch监视 第五篇 : 组件…

C#语言基础

一、复杂数据类型 1. 枚举 1.1 基本概念 1.1.1 枚举是什么 枚举是一个被命名的整型常量的集合&#xff0c;一般用它来表示状态、类型等等 1.1.2 申明枚举和申明枚举变量 申明枚举和申明枚举变量是两个概念 申明枚举&#xff1a;相当于是创建一个自定义的枚举类型 申明枚…

十大标准:评价B端系统界面美感度,你看了你也会。

美感和易用是评价B端系统用户体验的最高原则&#xff0c;本期从先从美感角度来分析B端界面 评价B端系统界面美感度的十大标准可以根据设计原则和用户体验来进行评估&#xff0c;以下是一些常见的标准&#xff1a; 一致性 界面元素的风格、布局和交互应该保持一致&#xff0c;…

Flutter连接websocket、实现在线聊天功能

老规矩效果图: 第一步:引入 web_socket_channel: ^2.4.0 第二步:封装 websocket.dart 单例 import dart:async; import dart:convert; import package:web_socket_channel/web_socket_channel.dart; import package:web_socket_channel/io.dart;class WebSocketManager {…

森林消防—高扬程水泵:守护绿色屏障的专业利器/恒峰智慧科技

在广袤的森林中&#xff0c;火灾无疑是最具破坏性的灾难之一。为了及时应对森林火灾&#xff0c;保护珍贵的自然资源和生态平衡&#xff0c;高效的消防设备显得尤为重要。森林消防高扬程水泵便是其中一款专业设备&#xff0c;以其高效输送水源的能力&#xff0c;成为守护森林绿…

Denoising diffusion models for out-of-distribution detection

Denoising diffusion models for out-of-distribution detection 摘要1 介绍2 相关工作2.1 基于生成得方法2.2 基于重构的方法3 方法3.1.扩散模型3.2.多次重建3.3.相似性评估4实验4.1. Experimental details4.2. Results for computer vision datasets4.3医学数据集上的结果4.4…

python 12实验

1.导入数据。 2.清洗数据&#xff0c;将缺失值或“NAN”替换为“无”&#xff0c;并将文本数据转换为数值型数据。 3.使用聚类算法&#xff08;如KMeans&#xff09;对数据进行聚类&#xff0c;并计算样本到簇中心的平均距离以确定最佳的簇数量。 4.对数据进行PCA降维&#xff…

Django Admin后台管理:高效开发与实践

title: Django Admin后台管理&#xff1a;高效开发与实践 date: 2024/5/8 14:24:15 updated: 2024/5/8 14:24:15 categories: 后端开发 tags: DjangoAdmin模型管理用户认证数据优化自定义扩展实战案例性能安全 第1章&#xff1a;Django Admin基础 1.1 Django Admin简介 Dj…

AI预测福彩3D第10套算法实战化赚米验证第1弹2024年5月5日第1次测试

从今天开始&#xff0c;准备启用第10套算法&#xff0c;来验证下本算法的可行性。因为本算法通过近三十期的内测&#xff08;内测版没有公开预测结果&#xff09;&#xff0c;发现本算法的预测结果优于其他所有算法的效果。彩票预测只有实战才能检验是否有效&#xff0c;只有真…

旅游出行大热!景区电话却打不通了?

根据文化和旅游部5月6日发布的数据显示,今年“五一”假期,全国国内旅游出游合计2.95亿人次。 这个数据可以看出出游的热度是非常高的&#xff0c;但有网友表示在旅游的时候遇到糟心的事情&#xff0c;比如无法联系到景区&#xff0c;网友吐槽自己打电话20次仅仅接通了一次&…

前端奇怪面试题总结

面试题总结 不修改下面的代码进行正常解构 这道题考的是迭代器和生成器的概念 let [a,b] {a:1,b:2}答案 对象缺少迭代器&#xff0c;需要手动加上 Object.prototype[Symbol.iterator] function* (){// return Object.values(this)[Symbol.iterator]()return yeild* Object.v…

场外期权个股怎么对冲?

今天期权懂带你了解场外期权个股怎么对冲&#xff1f;场外个股期权是一种在非交易所市场进行的期权交易&#xff0c;它允许投资者针对特定的股票获得未来买入或卖出的权利。 场外期权个股怎么对冲&#xff1f; 持有相反方向的期权&#xff1a;这是最直接的对冲方法&#xff0c…
最新文章