起因是用 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