gpt4 book ai didi

c - 使用 libconfig 在 C 中读取配置文件

转载 作者:太空宇宙 更新时间:2023-11-03 23:26:50 25 4
gpt4 key购买 nike

我在我的配置文件中为选项定义了一个结构,并在“config.h”文件中定义了一个指向该结构的指针,我使用 libconfig 读取配置文件,并在文件“config.c”中定义的函数 get_config() 中设置值”。在 main 函数中,我初始化指向结构的指针并调用 get_config() 函数。 libconfig 运行良好并正确打印结构字段的值,但是当我在主要函数中打印相同字段时,它们的值不正确!

“配置.h”

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

typedef struct
{
int buffer_size;
const char * DBusername;
const char * DBpassword;
}conf;

conf *config;

int get_config();

“配置.c”

#include "config.h"


int get_config()
{
config_t cfg;
config_setting_t *setting;

config_init(&cfg);

/* Read the file. If there is an error, report it and exit. */
if(! config_read_file(&cfg, "config.cfg"))
{
fprintf(stderr, "%s:%d - %s\n", config_error_file(&cfg),
config_error_line(&cfg), config_error_text(&cfg));
config_destroy(&cfg);
return(EXIT_FAILURE);
}

if(config_lookup_int(&cfg, "buffersize", &config->buffer_size))
printf("buffersize: %d\n\n", config->buffer_size);
else
fprintf(stderr, "No 'buffersize' setting in configuration file.\n");

if(config_lookup_string(&cfg, "DBusername", &config->DBusername))
printf("DBusername: %s\n\n", config->DBusername);
else
fprintf(stderr, "No 'DBusername' setting in configuration file.\n");

if(config_lookup_string(&cfg, "DBpassword", &config->DBpassword))
printf("DBpassword: %s\n\n", config->DBpassword);
else
fprintf(stderr, "No 'DBpassword' setting in configuration file.\n");

config_destroy(&cfg);

return(EXIT_SUCCESS);

}

“store.c”

int main(){
config = (conf*) malloc(sizeof(conf));
if(get_config() == EXIT_FAILURE)
return 0;

printf("\n%s", config->DBusername);
printf("\n%s", config->DBpassword);
printf("\n%d", config->buffer_size);
}

最佳答案

问题是因为在结构体中定义了char*。我把char*改成了char[],问题解决了! :)

关于c - 使用 libconfig 在 C 中读取配置文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25019078/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com