2016-07-15 50 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 

我嘗試許多樣本I前兩個屬性值爲空;

回答

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

謝謝。現在它正在工作然後爲什麼上面的第三個屬性值不是null。 –

相關問題