Config lesen



  • Hi,
    Als Übung wollte ich einen Config Reader schreiben.
    Bin noch unerfahren in C++.
    Hier mal der Code:

    char* config::get(char* var) {
    this->read();
    std::string buffer,buffer2;
    std::string::size_type loc,loc2;
    for(unsigned int i=1;i<=line.size();i++) {
    buffer = line[i-1];
    loc = buffer.find_first_of('"');
    if(loc == std::string::npos) {
    loc2 = buffer.find_last_of('"',loc);
    if(loc2 == std::string::npos || loc != loc2) {
    buffer2 = buffer.substr(0,loc);
    if(buffer2.length() != 0) {
     for(unsigned int i = 0;i < buffer2.length();i++)
        {
         if (buffer2[i] ==' ')
         {
          buffer2.replace(i,1,"");
         }
        }
        if(strcmp(var,buffer2.c_str()) == 0) {
    buffer2 = buffer.substr(loc,loc2);
    char* returnvalue = (char*)buffer2.c_str();
    return returnvalue;
        }
    }
    }
    }
    }
    return "NULL";
    }
    

    Die Funktion Read macht nichts anderes als die Datei in den vector line einzulesen.
    Jedoch bekomme ich immer NULL zurück obwohl in der Datei steht:
    testvar "123"

    Warum funktioniert das so nicht? 😕



  • rück das erstmal richtig ein. Den fehler hab ich jetz kein bock zu suchen, allerdings kann das so gar nicht klappen:

    Du gibtst quasi buffer2.c_str() zurück. buffer2 ist aber nur in der funktion bekannt und wird nach dem aufruf zerstört, der char* zeigt also sonstwohin. Warum gibst du nicht std::string zurück und nimmst ein const std::string& als parameter an?



  • Hi,
    Ist doch gut eingerückt^^

    Der Wert wird doch noch zurückgegeben bevor er zerstört wird.
    Zerstört wird laut Lernbuch erst sobald die Klammer kommt und der wert wird ja bei return zurückgegeben.


Anmelden zum Antworten