sscanf()用法简介

#include<stdio.h>  
#include<stdlib.h>  
#include<string.h>  
  
int main()
{  
    char str[100];  
    //用法一:取指定长度的字符串  
    sscanf("12345","%4s",str);  
    printf("用法一\nstr = %s\n",str); 
 
	 //用法二:格式化时间  
    int year,month,day,hour,minute,second;  
    sscanf("2013/02/13 14:55:34","%d/%d/%d %d:%d:%d",&year,&month,&day,&hour,&minute,&second);  
    printf("用法二\ntime = %d-%d-%d %d:%d:%d\n",year,month,day,hour,minute,second);  
  
    //用法三:读入字符串  
    sscanf("12345","%s",str);  
    printf("用法三\nstr = %s\n",str);  
  
    //用法四:%*d 和 %*s 加了星号 (*) 表示跳过此数据不读入. (也就是不把此数据读入参数中)  
    sscanf("12345acc","%*d%s",str);  
    printf("用法四\nstr = %s\n",str);  
  
    //用法五:取到指定字符为止的字符串。如在下例中,取遇到'+'为止字符串。  
    sscanf("12345+acc","%[^+]",str);  
    printf("用法五\nstr = %s\n",str);  
  
    //用法六:取到指定字符集为止的字符串。如在下例中,取遇到小写字母为止的字符串。  
    sscanf("12345+acc121","%[^a-z]",str);  
    printf("用法六\nstr = %s\n",str);  
    
	//综合测试
	char str1[100] ="123568qwerSDDAE";
    char lowercase[100];
    int num;
    sscanf(str1,"%dq%[a-z]", &num, lowercase);
    printf("The number is: %d.\n", num);
    printf("The lowercase is: %s.", lowercase);
	return 0;
}

可以参考百度百科https://baike.baidu.com/item/sscanf/10551550?fr=aladdin

### C语言 `sscanf` 函数使用说明 #### 函数声明 `sscanf()` 是 C 语言中的标准库函数,用于从字符串中读取格式化数据。其函数声明如下: ```c int sscanf(const char *str, const char *format, ...); ``` 其中: - `str`: 要解析的输入字符串[^1]。 - `format`: 格式控制字符串,指定如何解析输入字符串[^2]。 - 可变参数列表:用于存储解析结果的变量地址。 返回值为成功匹配并赋值的字段数量,如果在第一个转换之前发生错误,则返回值为零或负数[^4]。 --- #### 功能描述 `sscanf()` 的功能是从给定的字符串中提取数据,并按照指定的格式将其存入相应的变量中。它类似于 `scanf()`,但操作对象是一个字符串而不是标准输入流[^3]。 --- #### 示例代码 以下是几个常见的 `sscanf()` 使用场景及其对应的代码示例: ##### 示例 1: 提取整数和浮点数 假设有一个字符串 `"123 abc 456.78"`,我们希望从中分别提取整数和浮点数值。 ```c #include <stdio.h> int main() { const char input[] = "123 abc 456.78"; int integer; float floating; sscanf(input, "%d %*s %f", &integer, &floating); printf("Integer: %d\n", integer); // 输出 Integer: 123 printf("Floating point: %.2f\n", floating); // 输出 Floating point: 456.78 return 0; } ``` ##### 示例 2: 解析日期字符串 假设有一个日期字符串 `"2023-10-05"`,我们需要将其分解成年、月、日三个部分。 ```c #include <stdio.h> int main() { const char dateStr[] = "2023-10-05"; int year, month, day; sscanf(dateStr, "%d-%d-%d", &year, &month, &day); printf("Year: %d, Month: %d, Day: %d\n", year, month, day); // 输出 Year: 2023, Month: 10, Day: 5 return 0; } ``` ##### 示例 3: 处理带空格的字符串 当需要处理包含多个单词的字符串时,可以利用 `%[` 和 `%]` 来捕获特定字符集内的子串。 ```c #include <stdio.h> int main() { const char sentence[] = "Hello world! This is a test."; char word1[50], word2[50]; sscanf(sentence, "%s %[A-Za-z]", word1, word2); printf("Word1: %s\n", word1); // 输出 Word1: Hello printf("Word2: %s\n", word2); // 输出 Word2: world! return 0; } ``` --- ### 注意事项 1. **格式符与实际数据不匹配**: 如果提供的格式符与目标字符串的内容不符,可能导致未定义行为或无法正确解析数据。 2. **缓冲区溢出风险**: 在使用字符串类型的格式符(如 `%s`, `%[...]`)时,应始终指定最大宽度以防止缓冲区溢出。 3. **忽略多余的数据**: 利用星号 (`%*`) 占位符可以让某些字段被跳过而不保存到任何变量中。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值