使用libconfig读取C中的配置文件

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

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

“config.h”

“store.c”

我在配置文件中为选项定义了一个结构,并在“config.h”文件中定义了指向此结构的指针

这句话让我想知道配置文件是什么。i、 是空调还是空调?其他文件的可见性如何

您的问题可能是因为结构的作用域(可见性)没有提供给
main()
函数所在的文件
#包括定义结构的.h,并确保该结构的实例化具有全局作用域,或在main()内创建实例化

此文件配置将提供对.h:

在somefile.h中:

typedef struct 
{
  int membername;
} A_STRUCT;

extern A_STRUCT a
)

在someotherFile.c中

#include "somefile.h"

A_STRUCT a = {3};  //global copy of the struct, with assignment

int main(void)
{
    printf("%d", a.membername);
    return 0;
}

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

您应该包含实际代码或。这可能是因为
main()
函数所在的文件没有提供结构的作用域(可见性)。包括定义结构的.h,并确保该结构的实例化具有全局作用域,或在
main()
(该实例化没有价值,但可以使用)“要链接库,请指定'-lconfig'作为链接器的参数。”如何为makefile执行此操作?@ZuzooVn,在Makefile.am文件中(由于注释限制,无法包含完整的Makefile.am):。。。LIBS=-lconfig$(MYSQL)。。。本地安装数据:$(安装)srv_store.conf$(DESTDIR)$(CONFIGDIR)/srv_store.conf.default如果测试-f$(DESTDIR)$(CONFIGDIR)/srv_store.conf;然后$(安装)srv_store.conf$(DESTDIR)$(CONFIGDIR)/srv_store.conf;fi EXTRA_DIST=struct.h config.h db.h file.h config.cfg$(MYSQL)$(LIBS)请查看我的代码。主要问题是结构的字段设置在另一个函数中!“config”指针对main可见。
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);
}
typedef struct 
{
  int membername;
} A_STRUCT;

extern A_STRUCT a
#include "somefile.h"

A_STRUCT a = {3};  //global copy of the struct, with assignment

int main(void)
{
    printf("%d", a.membername);
    return 0;
}