C语言—sscanf函数使用总结
2016-03-26 16:03
363 查看
前言
最近工作中,需要写测试程序读取文件中数据,一行行的使用sscanf函数提取相应字段,今天就小小的总结下。函数原型说明
int sscanf( const char *buffer, const char *format [, argument ] ... );
1、 sscanf属于scanf函数家族一员,从输入源—字符串中将参数buffer的字符串根据参数format字符串来转换并格式化数据,转换后的结果存于对应的参数内。
2、 format 是格式控制字符串,它包含控制字符(如:%d,%i,%s等),空白字符(如:空格、制表符\t、回车换行符\n或其连续组合)以及非空白字符;
3、 …是一组指针变量,是上述函数用来保存结果值的;
4、 返回值为被成功赋值的指针变量的个数,如果该函数发生错误,则返回EOF(-1)。
格式控制说明
format可以是一个或多个 {%[*] [width] [{h | l | I64 | L}]type | ’ ’ | ‘\t’ | ‘\n’ | 非%符号}该公式中符号解释如下:
1、 * 也可用于格式中, (即 %* d 和 %* s) 加了星号 ( * ) 表示跳过此数据不读入. (也就是不把此数据读入参数中)
2、{a|b|c}表示a,b,c中选一
3、[d],表示可以有d也可以没有d
4、width表示读取宽度。
5、{h | l | I64 | L}:参数的size,通常h表示单字节size,I表示2字节 size,L表示4字节size(double例外),l64表示8字节size。
6、type :这就很多了,就是%s,%d之类。
7、特别的:%*[width] [{h | l | I64 | L}]type 表示满足该条件的被过滤掉,不会向目标参数中写入值
支持集合操作:
%[a-z] 表示匹配a到z中任意字符,贪婪性(尽可能多的匹配)
%[aB’] 匹配a、B、’中一员,贪婪性
%[^a] 匹配非a的任意字符,贪婪性
注意事项
1、待赋值字段一定要初始化,否则会出现段错误2、操作文件时,读取源字符串时,format格式化中最好加换行符”\n”
3、format格式化字符串中如果操作多种数据类型,类似源字符串–“aaa:2008:22.3”,format–”%s:%d:%lf”, 这样做会导致源字符串直接赋值给第一个字段,所以这时候要给字符串加空格作为结束标志
源字符串: aaa:2008:22.3 format: %[^:]:%d:%lf
源字符串:aaa :2008:22.3 format: %s%*[ ]:%d:%lf
就酱!
总结
sscanf函数避免了手工操作字符串的行为,尤其注意该函数不会验证指针参数的类型是否对应format格式代码中的正确类型。相关文章推荐
- 如何组织构建多文件 C 语言程序(二)
- 如何写好 C main 函数
- Lua和C语言的交互详解
- 关于C语言中参数的传值问题
- 简要对比C语言中三个用于退出进程的函数
- 深入C++中API的问题详解
- 基于C语言string函数的详解
- C语言中fchdir()函数和rewinddir()函数的使用详解
- C语言内存对齐实例详解
- C语言编程中统计输入的行数以及单词个数的方法
- C语言自动生成enum值和名字映射代码
- 使用C语言判断英文字符大小写的方法
- c语言实现的带通配符匹配算法
- C语言实现顺序表基本操作汇总
- C语言中计算正弦的相关函数总结
- 使用C语言详解霍夫曼树数据结构
- 探讨C语言的那些小秘密之断言
- C语言实现BMP转换JPG的方法
- 深入探讨C语言中局部变量与全局变量在内存中的存放位置
- C语言查找数组里数字重复次数的方法