2016-07-15 2 views
2

Я использую libconfig C api для файла свойств синтаксического анализа. Я получил нулевое значение в первых двух свойствах.Ошибка Libconfig при анализе первых двух значений

test.properties

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

config.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 

Стараюсь много образца я первый значение два свойства равно нулю;

ответ

0

Когда вы звоните 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); 

} 
+0

спасибо.! теперь он работает. Тогда почему значение выше третьего свойства не равно нулю. –

Смежные вопросы