爱悠闲 > 关于sscanf和strtol的用法以及在ini文件中读取section,key,value的用法

关于sscanf和strtol的用法以及在ini文件中读取section,key,value的用法

分类: linux-C  |  标签: ini,正则表达式,character,存储,string,百度  |  作者: taolinke 相关  |  发布日期 : 2014-12-01  |  热度 : 276°

sscanf呢,就是把string当做输入,而不是像scanf那样,把标准键盘输入当做输入。然后根据Format翻译解释,把匹配format的结果存储在后面指针指向的内存区域,man里面原文是这样写的,read character data, interpret it according to a format, and store the
       converted results into specified memory locations.

这里面需要理解的就是format,这个format用于匹配要存储到后面内存区域的,都是以%开始,除了像一般的我们勇于scanf里面的那些外,有一些需要注意的。

百度百科里写的比较好,一个或多个 {%[*] [width] [{h | l | I64 | L}]type | ' ' | '/t' | '/n' | 非%符号}。

*号就是表示跳过,不匹配这个。

  %[a-z] 表示匹配a到z中任意字符,贪婪性(尽可能多的匹配)

  %[aB'] 匹配a、B、'中一员,贪婪性  

      %[^a] 匹配非a的任意字符,贪婪性

其实和正则表达式差不多。对于ini文件操作的时候,这个就派上了用场,

sscanf(line, "[%[^]]", section); 用来读取section的名字。

sscanf (line, "%[^=] = %[^;#]",     key, value);这个就可以用来读取key和value值了。

strtol就是atoi的增强版,她可以转换成2-36进制之间的数值。如果base是0的话,会自动识别是多少进制,

比如020就是16,0x20就是32.

一般是这样用的,

(int)strtol(str, NULL, 0);

这样就可以把ini文件中的 value转换成数值了。