将const char *复制到char **中

时间:2015-08-27 07:03:44

标签: c libconfig

我正在使用libconfig库从文件中读取一些配置数据。我无法解析出解析信息和清理后的功能。

运行strcpy(*hostname, tmp)会导致核心转储。

hostnameportip已初始化为NULL

int parseConfig(char **hostname, char **port, char **ip) {

    config_t cfg, *cf;
    const char *tmp;

    cf = &cfg;
    config_init(cf);

    if(!config_read_file(cf, CONFIG)) {
        fprintf(stderr, "%s:%d - %s\n",
            config_error_file(cf),
            config_error_line(cf),
            config_error_text(cf));
        config_destroy(cf);
        return(EXIT_FAILURE);
    }

    config_lookup_string(cf, "hostname",  &tmp);
    strcpy(*hostname, tmp);
    config_lookup_string(cf, "ip", &tmp);
    strcpy(*ip, tmp);
    config_lookup_string(cf, "port", &tmp);
    strcpy(*port, tmp);

    config_destroy(cf);

    return(EXIT_SUCCESS);
}

1 个答案:

答案 0 :(得分:0)

切断中间人。

config_lookup_string(cf, "hostname",  hostname);

这要求你永远不要销毁cfg,因为它拥有为配置字符串分配的内存。

static config_t cfg;
config_t *cf;

// config_destroy(cf); <-- don't!

如果您每次运行程序只读取一次配置,那么这不应该是一个问题。