C语言中sscanf()函数相关用法
1、前言
C库函数sscanf()和scanf()函数类似,前者用于从字符串中读取格式化输入,后者则是从键盘(stdin)中格式化输入,该函数的声明如下所示:
#include <stdio.h> int sscanf(const char *str, const char *format, ...);
参数说明:
- str:C语言中的字符串,该字符串作为函数检索数据的来源;
- format:C中的字符串,包含以下各项的一个或者多个:空格字符、非空格字符和format说明符;
对于format说明符的形式为[=%[*][width][modifiers][type=],format说明符讲解如下:
*:这是一个可选的星号,表示数据是从流stream中读取的,但是可以被忽视,它不存储在对应的参数中;
width:指定在当前中读取操作中的最大字符数;
modifiers:为对应的附加参数所指向的数据指定一个不同于整型(针对 d、i 和 n)、无符号整型(针对 o、u 和 x)或浮点型(针对 e、f 和 g)的大小: h :短整型(针对 d、i 和 n),或无符号短整型(针对 o、u 和 x) l :长整型(针对 d、i 和 n),或无符号长整型(针对 o、u 和 x),或双精度型(针对 e、f 和 g) L :长双精度型(针对 e、f 和 g);
type:一个字符,指定了要被读取的数据类型以及数据读取方式。
对于type类型说明符,详情如下:
c:单个字符,读取下一个字符,如果指定了一个不为1的width,函数会读取width个字符,并通过参数传递,将它们存储在数组中的连续位置,对应的参数类型为char *;
d:十进制数,数字前面的+或-号是可选的,对应的参数类型为int *;
e,E,f,g,G:浮点数,包含了一个小数点、一个可选的前置符号+或-、一个可选的后置字符e或E以及一个十进制数,对应的参数类型为float *;
o:八进制整数,对应的数据类型为int *;
s:字符串,函数将连续读取字符,直到遇到空格字符,对应参数类型为char *;
u:无符号的十进制数,对应参数类型为unsigned int *;
x,X:十六进制整数,对应参数类型为int *。
- 附加参数:该函数接受一系列的指针作为附加参数,每一个指针都指向一个对象,对象的类型由format字符串相应的%标签指定,参数与%标签的顺序相同。
函数返回值:
函数如果调用成功,将返回成功匹配和赋值的个数,如果达到文件末尾或发生读错误,则返回EOF。
2、sscanf()用法实例
接下来对一个简单的实例进行演示,实例代码如下:
#include <stdio.h> #include <stdlib.h> #include <string.h> int main(int argc, char *argv[]) { int day, year, ret; char weekday[20], month[20], date[50]; strcpy( date, "Saturday March 20 2000" ); ret = sscanf( date, "%s %s %d %d", weekday, month, &day, &year ); if (ret != 4) { printf("date string format failed\n"); return ret; } printf("%s %d, %d = %s\n", month, day, year, weekday ); return(0); }
对上面的实例进行编译,并执行:
$ gcc sscanf.c -o sscanf $ ./sscanf
最后执行效果如下所示:
从运行结果,可以看到,字符串的格式化成功,对应的值已经成功写进变量中。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App