C语言的SScanf函数(重要)

函数原型:int sscanf(const char *str, const char *format, ...);

  • str:待解析的字符串

  • format:字符串的格式描述

  • ...:不定参数,存放解析后的字符串

包含头文件:<stdio.h>

功能:解析字符串

返回值:成功匹配并赋值的参数个数

注意事项:vs2022中需要提前定义   #define _CRT_SECURE_NO_WARNINGS,防止平台认为sscanf函数不安全而产生的报错问题

常见用法:

1、字符串解析结果放入整形变量

#define _CRT_SECURE_NO_WARNINGS 
#include <stdio.h>
int main() 
{
    int year, month, day;
    int converted = sscanf("20191103", "%04d%02d%02d", &year, &month, &day);
    printf("成功匹配并赋值的参数个数=%d\n年份=%d\n月份=%d\n日期=%d\n", converted, year, month, day);
    return 0;
}

d4395ed7d41f599641da2e6617423a69.png

2、字符串解析结果放入数组

#define _CRT_SECURE_NO_WARNINGS 
#include <stdio.h>
int main() 
{
    char str[32] = "";
    sscanf("123456abcdedf", "%31[0-9]", str);//只能向str数组中存入0~9这几个字符
    printf("str=%s\n", str);
    return 0;
}

9b6214907bb99519608a79bdf8a73164.png

  • %31表示能读取字符数组的最大长度,需要人为选择添加否则容易出现缓冲区溢出问题
#define _CRT_SECURE_NO_WARNINGS 
#include <stdio.h>
int main() 
{
    char str[32] = "";
    sscanf("123456abcdedf", "%31[0-9a-z]", str);//只能向str数组中存入0~9这几个字符
    printf("str=%s\n", str);
    return 0;
}

6a41122340358cd2188a5440f2657275.png

向[]中新增了一个选择条件,现在可以向字符串中添加0~9和a~z,如果此时使用^就可以达到相反效果,即向字符数组中添加的内容不包含[]中指定的字符

#define _CRT_SECURE_NO_WARNINGS 
#include <stdio.h>
int main() 
{
    char str[32] = "";
    sscanf("123456abcdedf", "%31[^a-z]", str);//只能向str数组中存入0~9这几个字符
    printf("str=%s\n", str);
    return 0;
}

f38a81661431e0b9152b0f9887902573.png

  • 被*修饰的[]会在解析时被忽略,不会存放[]中的解析结果,且sscanf函数返回-1
#define _CRT_SECURE_NO_WARNINGS 
#include <stdio.h>
int main() 
{
    char str[32] = "";
    int ret = sscanf("123456abcdedf", "%*[0-9]%31[a-z]", str);
    printf("ret=%d, str=%s\n", ret, str);
    return 0;
}

835dd9e285354700217b0594501877ac.png

~over~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值