pointer problem



  • hallo!

    Habe eine Funktion geschrieben, die Eintraege aus einer config Datei lesen soll. Nur weis ich nicht, wie ich das mit String Einträge machen soll.

    if((confOption = strstr(confLine, "PROXY_PORT = ")) != NULL)
    {
    eintrag1 = atoi(confOption + 12);
    }
    else if((confOption = strstr(confLine, "USER_AGENT = ")) != NULL)
    {
    eintrag2 = confOption + 12;
    }
    else if((confOption = strstr(confLine, "MAXIMAL_CONNECTIONS = ")) != NULL)
    {
    eintrag3 = atoi(confOption + 21);
    }
    else if((confOption = strstr(confLine, "DEBUG_LEVEL = ")) != NULL)
    {
    eintrag4 = atoi(confOption + 13);
    }

    Dabei ist eintrag2 ein "char *" alles ander sind "int" variablen. Nun zeigt mir eintrag2 natuerlich immer auf den Letzten Wert und nicht mehr auf den String den er ursprünglich hatte, bzw auch behalten sollte. Wie kann ich das am geschicktesten ändern?

    Danke.



  • confLIne wird ja wohl ein char* sein das einen langen string enhält...

    wenn du jetzt mit strstr den zeiger bekommst wo dein jeweiliges schlüsselwort anfängt glaub ich kaum das dein atoi so funzen wird wie du dir das vorstellst...der geht den string ja bis zum nullbyte durch und da werden ja wohl nicht nur noch zahlen kommen, was bedeutet das dir dein atoi immer 0 liefern wird...

    die lösung sollte sein das du von deinem ersten mit strstr gefunden wort weitersuchen lässt nach dem nächsten trennzeichen und alles dazwischen kopierst du dann (z.b. mit memcpy) um dann eine entsprechende operation drauf anzuwenden



  • Doch den rest macht er:

    - local proxy port: 8080
    - http user-agent: = 2 <- ?!?
    - maximum connections: 5
    - debug level: 2



  • stimmt scheints recht zu haben die funktion atoi ist schlauer als ich dachte

    ändert aber nichts dran das du den useragent teil rausparsen musst und dafür würd ich einfach noch ein zweites mal mit strstr nach dem abschlusszeichen von useragent suchen und alles zwischen den beiden pointern kopieren..



  • hmmmm, ich habe das zwar jetzt noch nicht ausprobiert , wie du gesagt hasst, aaaber dürfte doch normal auch nicht funktioniern da confOption den wert ändert und ihn an eintrag2 zuweiüt, da eintrag2 ein pointer auf confOption ist.
    Wenn ich das jetzt verkehrt verstehen sollte, bitte ich um ein kleines code snippet



  • naja irgendwo steht im text bei dir USER_AGENT =
    dann kommt der tralala mit deinem useragent aber irgendwo muss der ja mal zuende sein... was kommt denn nach dem user_agent für ein zeichen?... wenn du das nicht weisst wirds wohl schwer werden den rauszufiltern... weil du ja gar nicht weiss was noch zum useragent gehört und was nicht?



  • das steht noch vor dem kram:

    while((fgets(confLine, 255, confFile)) != NULL)
    {
    if(confLine[0] != '#' && confLine[0] != '\n')
    {

    ...vergessen zu pasten 😉



  • nein ich meinte folgendes
    der string den du parsen willst könnte ja z.b. so aussehen
    "asdfkjasdhfPROXY_PORT = 1234 USER_AGENT = weissichwer+asdfMAXIMAL_CONNECTIONS = 4711adsfasfd DEBUG_LEVEL = 546"

    bei den zahlen funzt das weil atoi impliziet annimmt er soll nur so lange die zeichen weiterverwenden so lange es zahlen sind...

    so dein useragent soll ja ein string sein... so probelm dabei ist das man dafür wissen muss wie der beendet wird... also ob der useragent nur
    weissichwer
    oder weissichwer+as
    oder ....

    so und dieses trennzeichen musst du wissen...

    dann machst du sowas in der art

    char*p,*q;
    
    p=strstr(confLine, "USER_AGENT = ");
    q=strstr(p, "+asdf");
    

    dann weisst du das das von dir gesuchte wort zwischen den beiden pointern p und q liegt und kannst dann die dazwischenliegenden zeichen z.b.mit memcpy kopieren



  • ok aber dies waere dann aber variable, dann koennte auch xxy oder was ich danach stehen.



  • *hust*

    Ok, dies wäre dann aber variabel, es könnte auch sein das xxy oder was anderes danach stehen würde.



  • variable kann der inhalt schon sein aber du musst eine trennkennung haben an sonsten geht das nicht weil du ja nicht weisst wo der string "abgschnitten" werden soll...
    irgendwas musst du da definieren...


Anmelden zum Antworten