0

在上下文中 - 我正在为一个将进入更大程序的类编写一个简单的独立配置文件解析器。我知道有非常有效的库(例如 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 会尝试读取文件中的下一个可用字符串吗?

4

1 回答 1

0

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

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

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

于 2012-06-15T00:22:59.973 回答