Aus Strtok in ein struct char schreiben



  • Hallo 🙂
    Ahm folgendes Problem, Ich habe angefangen ne simple Datenbank zu programmieren.
    Aber es scheitert schon bei der Initialisierung der Vorhandenen Datensätzen.

    Der einzelne Datensatz wird zwar in ein String übertragen (aus einer txt Datei)
    aber dann soll der String durch strtok in 4 Abschnitte gegliedert werden
    Id, Nachname, Vorname und Alter Was eigentlich auch geht.

    Aber jetz die Abschnitte in den struct zu laden geht nicht aus dem Gerund:
    Error: exprssion must be a modifiable Ivalue

    //Struct
    struct Kundendaten{
    	char id[5];
    	char vname[30];
    	char nname[30];
    	char alter[5];
    
    //Main
            ifstream lesen;
    	ofstream schreiben;
    
        Kundendaten datensatz[1000];
    
    	int Idnummer=0;
    	int menu;
    
    	char gelesene_daten[1000];
    
    //Datenbank initialisieren
    	lesen.open("db.txt",ios::in);
    
    	//while(!lesen.eof())// auskommentiert weil ich erstmal einen      
            //datensatz lesen will, dann soll zeile für zeile gelesen werden
    	//{
    		Idnummer++; 
    		strcpy(gelesene_daten,""); //Datensatz leeren					
    		lesen.getline(gelesene_daten,1000,'\n'); //Datensatz auf String 		
    
                    // hier wird datensatz rot unterstrichen und der error kommt
    		datensatz[Idnummer].id=strtok(gelesene_daten,"#");
    		datensatz[Idnummer].vname=strtok(NULL,"#");
    		datensatz[Idnummer].nname=strtok(NULL,"#");
    		datensatz[Idnummer].alter=strtok(NULL,"#");
    	//}
    	lesen.close();
    

    bei compelierung kommt: error C2440: '=' : cannot convert from 'char *' to 'char [5]'

    Wie kann man diesen Fehler beheben? Oder ist der ganze Ansatz aussichtslos?



  • Du vermischst C++ mit C-Relikten, das geht nur wenn man beides versteht und beherrscht 😉

    Da du schon getline() verwendest, kannst du es gleich richtig machen und dort dann das passende Trennzeichen '#' benutzen:

    lesen.getline(datensatz[Idnummer].id, sizeof(Kundendaten.id), '#');
    // ...
    

    (dafür dann aber den bisherigen getline()-Aufruf entfernen!)

    Und statt der char-Arrays solltest du besser std::string benutzen (auch dafür gibt es eine getline()-Funktion - aber als freie Funktion, nicht als Klassenfunktion)!

    PS: Dein auskommentiertes "while(!lesen.eof())" ist aber auch falsch - schau mal nach Beiträgen hier im Forum von SeppJ und/oder "Werner Salomon" (ich habe keine Lust das nochmals im Detail zu erklären 😉



  • danke läuft jetz mit dem richtigen getline 🙂
    Der rest wird kein problem sein...hoffe ich


Anmelden zum Antworten