C & libconfig: config_lookup_bool 返回 CONFIG_FALSE
Posted
技术标签:
【中文标题】C & libconfig: config_lookup_bool 返回 CONFIG_FALSE【英文标题】:C & libconfig: config_lookup_bool returns CONFIG_FALSE 【发布时间】:2021-05-28 07:34:26 【问题描述】:我正在尝试从组中读取布尔设置。我正在使用以下代码,但config_lookup_bool
总是返回 CONFIG_FALSE。据我了解,它应该将值写入send_keys
并返回 CONFIG_TRUE。
代码:
int send_keys;
config_t cfg;
config_init(&cfg);
config_read_file(&cfg, "config.cfg")
if (config_lookup_bool(&cfg, "settings.send_keys", &send_keys))
// do something here
config.cfg:
settings :
send_keys = "true";
start_apps = "false";
sync_clocks = "false";
pc_clock_is_origin = "true";
calibration_start_time = 0L;
;
我的代码或想法有什么错误吗?
【问题讨论】:
在此函数的原型中:int config_lookup_bool (const config_t * config, const char * path, int * value)
第二个参数表示路径。 "settings.send_keys"
是路径吗?你确定那个论点吗?也许使用.\\"config.cfg"
或者如果Linux ./"config.cfg"
我假设settings.send_keys
是一条路径。我从example1.c 和相应的example.cfg 中获取它。我的config.cfg
本身可以被读取。我在另一个地方阅读了更多设置,没有问题。
【参考方案1】:
有一个 config_lookup_bool
example here 包含配置文件和代码:(使用此示例与您所拥有的进行比较。)
配置文件内容:
# authenticator
name = "JP";
enabled = false;
length = 186;
ldap =
host = "ldap.example.com";
base = "ou=usr,o=example.com"; /* adapt this */
retries = [10, 15, 20, 60]; // Use more than 2
;
读取和处理它的源...
int main(int argc, char **argv)
config_t cfg, *cf;
const config_setting_t *retries;
const char *base = NULL;
int count, n, enabled;
cf = &cfg;
config_init(cf);
if (!config_read_file(cf, "ldap.cfg"))
fprintf(stderr, "%s:%d - %s\n",
config_error_file(cf),
config_error_line(cf),
config_error_text(cf));
config_destroy(cf);
return(EXIT_FAILURE);
if (config_lookup_bool(cf, "enabled", &enabled))
printf("Enabled: %s\n", enabled ? "Yep" : "Nope");
else
printf("Enabled is not defined\n");
if (config_lookup_string(cf, "ldap.base", &base))
printf("Host: %s\n", base);
retries = config_lookup(cf, "ldap.retries");
count = config_setting_length(retries);
printf("I have %d retries:\n", count);
for (n = 0; n < count; n++)
printf("\t#%d. %d\n", n + 1,
config_setting_get_int_elem(retries, n));
config_destroy(cf);
return 0;
【讨论】:
【参考方案2】:感谢您的意见。问题是我在“”中有真/假,因此它被解析为字符串。应该是的
settings :
send_keys = true;
start_apps = false;
sync_clocks = false;
pc_clock_is_origin = true;
calibration_start_time = 0L;
;
【讨论】:
以上是关于C & libconfig: config_lookup_bool 返回 CONFIG_FALSE的主要内容,如果未能解决你的问题,请参考以下文章