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

【C语言 | 字符串处理】sscanf 详细介绍、使用说明以及使用例子源码本文详细介绍了 C 语言解析字符串常用的 sscanf 函数 并给出了使用该函数解析字符串的例子

大家好,欢迎来到IT知识分享网。

😁博客主页😁:🚀【C语言 | 字符串处理】sscanf 详细介绍、使用说明以及使用例子源码🚀
🤑博客内容🤑:🍭嵌入式开发、Linux、C语言、C++、数据结构、音视频🍭
⏰发布时间⏰:2024-05-08 15:40:38

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


在这里插入图片描述

在这里插入图片描述

🎄一、概述

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

在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函数,并给出了使用该函数解析字符串的例子。

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

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/117581.html

(0)
上一篇 2025-11-19 21:33
下一篇 2025-11-19 22:01

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信