我使用libconfig C api解析属性文件。
前两个属性的值为空。
测试属性

 x = "hello";
 y = "world";
 z = "test" ;

配置c
char * getValueByKey(char * file_name , char * key) {
    config_t cfg;
    config_setting_t *setting;
    const char * value;

    config_init(&cfg);


    if (!config_read_file(&cfg, file_name))
    {
        printf("\n%s:%d - %s", config_error_file(&cfg), config_error_line(&cfg), config_error_text(&cfg));
        config_destroy(&cfg);
        exit(1);
    }
    if (config_lookup_string(&cfg, key , &value)){
        config_destroy(&cfg);
        printf("Hello %s\n",value );
        return (char *) value ;
    }
    else{
        printf("\nNo 'filename' setting in configuration file.");
        config_destroy(&cfg);
    }
}

int main(){
    char * x = getValueByKey("test.properties" , "x");
    char * y = getValueByKey("test.properties" , "y");
    char * z = getValueByKey("test.properties" , "z");
    printf("Values of X : Y : Z  = %s : %s : %s", x, y, z);
}

运行程序后,我只得到Z值。
输出:
Values of X : Y : Z  =  :  : test

我尝试了很多样本,前两个属性值为空;

最佳答案

当您调用config_destroy()库时,它将释放它分配的所有内存因此,在调用config_destroy()之前,您需要将结果保存到其他位置。

#include <stdio.h>
#include <libconfig.h>
#include <stdlib.h>


char value[100];
char * getValueByKey(char * file_name , char * key,char* value1) {
    config_t cfg;
    config_setting_t *setting;
    const char *value;
    config_init(&cfg);
    if (!config_read_file(&cfg, file_name))
    {
        printf("\n%s:%d - %s", config_error_file(&cfg), config_error_line(&cfg), config_error_text(&cfg));
        config_destroy(&cfg);
        exit(1);
    }
    if (config_lookup_string(&cfg, key , &value)){
        strcpy(value1,value);
        config_destroy(&cfg);
        //printf("%s:%s\n",key,value1);
        //printf("Hello %s\n",value );
        return (char *) value1 ;
    }
    else{
        printf("\nNo 'filename' setting in configuration file.");
        config_destroy(&cfg);
    }
}

int main(){
    char * x = getValueByKey("test.properties" , "x",value);
    printf("X = %s\n", x);
    char * y = getValueByKey("test.properties" , "y",value);
    printf("Y = %s\n", y);
    char * z = getValueByKey("test.properties" , "z",value);
    printf("Z = %s\n", z);

}

关于c - 解析前两个值时出现Libconfig错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38395335/

10-11 21:23