强大的 scanf 流解析

起因是用 popen 调用进程,对进程打印进行解析,发现 FILE 流式接口局限挺大,大多数解析库都要需要导出数据,即使支持流解析也不是 FILE * 这种文件流。这下能用的只有 scanf 系列的,深入研究一下发现 scanf 系列 API 本身还是挺强大的。
 
通常 scanf 的格式串中,百分号('%')起头后面加一个格式符,一般的格式符大家都知道,这里有几个很强大的格式符介绍如下
 
中括号('[' 和 ']')要成对使用,里面是字符组合。表示字符组合的时候,甚至可以使用 '^' 和 '-' 表示 "非" 和 "至"(与正则表达式类似同)。但是 '^' 表示非一定要放到最前面,而且它的含义是不包括整个组合;而 '-' 要表示"至"只能放到中间,放到最后就仅仅表示字符 '-'。还要注意的是 '[' 与格式符 's' 相同地位,无需后面再加 's'
man scanf 还举了个例子,原文: [^]0-9-] means the set "everything except close bracket, zero through nine, and hyphen"
 
星号('*')可以放置于各格式符前,表示匹配的字符串无需解析到后继的变量(也无需给出该变量地址),而且也不会记入返回值
 
格式符之前还可以加个长度,避免造成目标字符串溢出,但是要注意留出 '\0' 的空间,例如后面的变量原型是 char a[256], 则指定长度只可以是 255

--export from my evernote

转载于:https://www.cnblogs.com/luckybug/archive/2013/06/06/3121608.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值