当fscanf找不到格式字符串中定义的所有值时会发生什么?

时间:2012-06-15 00:08:38

标签: parsing input scanf config-files

在上下文中 - 我正在为一个将进入更大程序的类编写一个简单的独立配置文件解析器。我知道有一些非常有效的库(比如BOOST)可以为我做这个,但是这个类必须是严格独立的(没有外部库)。

所以,我有一个看起来有点像这样的配置文件:

output_file : some_output_file.root
input_file : input_file.txt
potential_file :

请注意, potential_file 条目为空,应该这样读。

我打算使用fscanf,格式说明符

fscanf(cfg_file,"%s : %s\n",flag,value);

然而,在 potential_file 标志的情况下会发生什么?字符串是否为空?或者fscanf会尝试读取文件中的下一个可用字符串吗?

1 个答案:

答案 0 :(得分:0)

你应该检查fscanf的返回值。它返回成功解析的参数数。如果按照模式在第3行冒号后没有空格,它将不会为您创建一个空字符串。在这种情况下它将停止解析。如果你想在没有额外检查的情况下玩安全,请在fscanf之前初始化值。

%s意味着在找到空格之前读取后续字符。后者定义为空白,换行或制表符。所以它不会跳到下一行。

还要考虑一些配置库,因为您已经以这种方式标记了您的问题。 YAML易于阅读且具有C绑定。