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转换成数值了。