Frage

Ich habe eine Struktur für Optionen in meiner Konfigurationsdatei und einen Zeiger auf diese Struktur in "config.h" -Datei und ich lese die Konfigurationsdatei mit libconfig und setze Werte in der Funktion get_config (), die in der Datei "config" definiert ist.c".In der Hauptfunktion initialisiere ich den Zeiger auf die Struktur und rufe die Funktion get_config () auf.libconfig funktioniert gut und druckt Werte von Strukturfeldern korrekt aus, aber wenn ich dieselben Felder in Hauptfunktionen drucke, sind ihre Werte falsch!

"konfig.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();

"konfig.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);

}

"speichern.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);
}
War es hilfreich?

Lösung

Das Problem liegt an der Definition von Char * in der Struktur.Ich habe das char * in char [] geändert und das Problem wird gelöst!:)

Andere Tipps

Ich habe eine Struktur für Optionen in meiner Konfigurationsdatei und einen Zeiger auf diese Struktur in "config.h" -Datei...

Diese Aussage lässt mich fragen, was für ein konfigurationsdatei is.also.ist es ein .c oder a.h?Und wie ist die Sichtbarkeit für andere Dateien?

Ihr Problem liegt wahrscheinlich daran, dass der Umfang (Sichtbarkeit) der Struktur nicht für die Datei bereitgestellt wird, in der die main() funktion residiert. #include der .h wo die Struktur definiert ist, und stellen Sie sicher, dass eine Instanziierung dieser Struktur entweder einen globalen Gültigkeitsbereich hat, oder erstellen Sie eine Instanziierung in main()

Diese Konfiguration von Dateien bietet Sichtbarkeit für main einer Struktur, die in der definiert ist.h:

in irgendeiner Datei.h:

typedef struct 
{
  int membername;
} A_STRUCT;

extern A_STRUCT a

;

in einer anderen Datei.c

#include "somefile.h"

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

int main(void)
{
    printf("%d", a.membername);
    return 0;
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top