Zweidimensionale char Arrays



  • Hi leute ich will eine *.txt datei auslesen und jede zeile speichern!
    dafür möchte ich einen zweidimensionalen char Array verwenden. Geht das eig?
    ich habs mal folgendermaßen versucht:

    char zeile[5][20];
    
    einlesen(){
    	fstream datei(Name, ios_base::in);
    	datei.seekg(0L, ios::beg);
    	int i = 0;
    	while(datei.eof()){
    		datei.getline(zeile[i][20], 20);
    		i++;
    	}
    

    der bringt mir folgenden fehler:
    error C2664: 'std::basic_istream<_Elem,_Traits> &std::basic_istream<_Elem,_Traits>::getline(_Elem *,std::streamsize)': Konvertierung des Parameters 1 von 'char' in 'char *' nicht möglich
    with
    [
    _Elem=char,
    _Traits=std::char_traits<char>
    ]
    Die Konvertierung eines ganzzahligen Typs in einen Zeigertyp erfordert ein reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat

    Was will der mir damit sagen bzw welche lösungen gibt es?
    Danke



  • Natürlich geht es.

    Aber ich denke der Einsatz von std::vector und std::string wär wesentlich praktischer und sicherer.



  • getline erwartet als ersten Parameter einen char*. Du übergibst aber ein char. Probier mal nur zeile[i] statt zeile[i][20]. Das sollte dann funktionieren.



  • Hallo

    Ich stimme Kenny zu.

    Das eigentliche Problem hier ist das du getline mit der ganzen Arrayangabe nur ein char übergibst. Du willst aber ja eine ganze Zeile lesen!

    datei.getline(zeile[i], 20);
    

    Und :
    - keine globalen Variablen benutzen wenn nicht unbedingt nötig
    - Funktionen brauchen einen Rückgabewert, und sei es nur void
    - Auch Name sollte ein Parameter der Funktion sein

    bis bald
    akari



  • void read_content(const char* file_name)
    {
        std::ifstream file_stream(file_name, std::ios::in);
        char lines[5][20];
        for (std::size_t i = 0; file_stream.eof() == false && file_stream.fail() == false && i < 5; ++i)
            std::getline(file_stream, lines[i], 20);
    
        // so schreibst du auch nciht über die Grenzen deines Arrays hinaus ... 
        // falls mal 6 Zeilen in der Datei sind ... sonnst stürzt dir dein Programm 
        // direkt ab ;)
    }
    


  • ja ok danke es funktioniert



  • hi leute
    ich möchte dieser funktion:

    int Datum_Datei_Message::Datum_kopieren (char Dateiname[50]){
    	ifstream datei(Dateiname, ios_base::in);
    	datei.seekg(0L, ios::beg);
    	datei.getline(Tag, 4);
    	datei.getline(Monat, 4);
    	datei.getline(Jahr, 5);
    	datei.getline(Message, 201);
    	return 0;
    }
    

    denn oben angesprochenen 2d char array übergeben!
    nur wie geht das? ich habs schon mal versucht das hat dann so ausgesehn

    klasse.Datum_kopieren(zeile [0]);
    

    für [0] würd ich jedoch eine variable einsetzen spielt aber normal keine rolle.
    Dann bringt mir aber ms visual studio
    error C2065: 'zeile': nichtdeklarierter Bezeichner
    was mach ich da falsch?
    Danke



  • Zeig mal komplette Klasse ... da scheint einiges falsch zu sein ... direkt zu deinem Problem: mach aus zeile eine membervariable ...



  • class Datum_Datei_Message{
    	private:
    		char Termin[200][55];							
    		int Anzahl_Termine;							
    
    	public:	
    		int Anzahl_einlesen();							
    		int Datum_kopieren (char Dateiname[50]);			
    };
    
    //Die beiden Funktionen
    int Datum_Datei_Message::Datum_kopieren (char Dateiname[50]){
    	ifstream datei(Dateiname, ios_base::in);
    	datei.seekg(0L, ios::beg);
    	datei.getline(Tag, 4);
    	datei.getline(Monat, 4);
    	datei.getline(Jahr, 5);
    	datei.getline(Message, 201);
    	return 0;
    }
    
    int Datum_Datei_Message::Anzahl_einlesen(){
    	fstream datei("Termine.txt", ios_base::in);
    	datei.seekg(0L, ios::beg);
    	while(!(datei.eof())){
    		datei.getline(Termin[Anzahl_Termine], 55); 
    		Anzahl_Termine++;
    	}
    	cout << "\n" << Anzahl_Termine ;
    	return 0;
    }
    

    ok das ist jetzt meine klasse sehr gekürzt weil ich ja noch andere funktionen und variablen hab
    wenn ich das richtig verstanden habe sind member variablen variablen die in der klasse enthalten sind das hab ich aber schon gemacht
    trotzdem danke
    warum kann ich jetzt Datum_kopieren() nicht Termin[i] übergeben?


Anmelden zum Antworten