INI Dateien, Strukturen und memcpy



  • Hi leutz,

    Ich schreibe ein Programm, das soll eine INI Datei einlesen, und das was gelesen wurde, in ein Member einer Struktur packen.

    Ich Programmiere mit dem c++ Builder, das selbe Problem tritt allerdings auch bei der Dev-C++ IDE auf.

    ich lasse erstmal einfach mal den Code Sprechen 😉 :

    [code]

    int err;
    char text[] = "a";
    struct INI_CONFIG{
    char key_STD_SMTP[9];
    char sekt_CONFIG[7];
    char default_Val[2];
    };

    struct CONFIG{
    char smtp_serv[255];
    char strt_dir[15];
    };

    int main()
    {

    struct CONFIG STARTUP, *cfg_ptr;
    struct INI_CONFIG INI_CONF, *ini_ptr;

    memcpy(INI_CONF.key_STD_SMTP, "STD_SMTP",9);
    memcpy(INI_CONF.sekt_CONFIG, "CONFIG",7);
    memcpy(INI_CONF.default_Val, "A",2);
    memcpy(STARTUP.strt_dir, "D:\\eclient.ini",15);
    //wenn ich nur einen Slash mache, ist der nacher ganz weg. Ist diese Lösung //Korrekt ?

    //ich muß doch immer ein Byte mehr als den String als letztes Argument bei
    //memcpy angeben, oder ?
    //Bitte schaut euch das nochmal in verbindung mit den Struktur prototypen an,
    //ob ich bei denen die richtigen Stringgrößen Angegeben habe.
    //zuerst hatte ich die Prototypen einz kleiner gemacht, als Das was memcpy an //Bytes kopiert, schließlich ist a[0] doch auch schon ein feld - und dann müßte
    //doch in a[0] genau ein Byte einpassen !!!
    //eigentlich sind die protoypen so falsch, weil sie immer ein byte zuviel //haben. (ich bedenke den String Terminator)

    cfg_ptr = &STARTUP;
    ini_ptr = &INI_CONF;
    MessageBoxA(0, INI_CONF.sekt_CONFIG, "Startup Succes",0);
    MessageBoxA(0, INI_CONF.key_STD_SMTP, "Startup Succes",0);
    MessageBoxA(0, INI_CONF.default_Val, "Startup Succes",0);
    MessageBoxA(0, STARTUP.strt_dir, "Startup Succes",0);

    err=GetPrivateProfileString(ini_ptr->sekt_CONFIG, ini_ptr->key_STD_SMTP,
    ini_ptr->default_Val,cfg_ptr->smtp_serv,255,cfg_ptr->strt_dir);
    itoa(err, &text, 10);
    if (err < 3){
    MessageBoxA(0, text, "Startup Error", 0);
    }else{
    MessageBoxA(0, STARTUP.smtp_serv, "Startup Succes",0);
    };
    return 0;
    }
    [code]

    Eigentlich sollte smtp_serv dann den inhalt eines smtp.server.de haben, aber so wie es aussieht, wird die INI Datei entweder nicht geöffnet, oder die Sektion wird nicht gefunden - weiß jemand einen Rat ?

    (in die Struktur wird der Default wert gesetzt - den will ich aber ja nicht)

    Nedda Gruß,
    Ole


Anmelden zum Antworten