Datei einlesen



  • Hallo,
    ich habe versucht mehrere Dateien einzulesen:

    int main(int argc, char* argv[]) {
    	if(argc==1) {
    		cout << "Fehler: keine Dateien angegeben"<<endl;
    		return 0;
    	}
    
    	for(int i=1; i<argc; ++i) {
    		ifstream quelle;
    		quelle.open(argv[i],ios::binary|ios::in);
    		if(quelle) {
    			char* buffer;
    			int length;
    			cout << "-----" << argv[i] << "-----"<<endl;
    			quelle.seekg (0, ios::end);
    			length=quelle.tellg();
    			quelle.seekg(0,ios::beg);
    			buffer=new char[length];
    			quelle.read (buffer,length);
    			quelle.close();
    			cout << buffer;
    			delete[] buffer;
    			cout << endl;
    			cout << "---------------------";
    			cout << endl<<endl;
    		}else{
    			cout << "Datei: " << argv[i] << " nicht gefunden!";
    		}
    	}	
    	return 0;
    }
    

    Es tritt folgendes Problem auf. Wenn ich 2 Dateien öffne:

    Datei 1:

    Hallo
    Test
    123
    

    Datei2:

    Noch ein
    Test
    

    Bekomme ich als Ausgabe bei Datei 2:

    Noch ein
    Test
    123
    

    Also irgendwie wird der Buffer nicht richtig gelöscht. Aber ich lösche den doch nach jedem einlesen, oder etwa nicht?


  • Administrator

    buffer ist nicht nullterminiert, daher erzeugst du undefiniertes Verhalten, wenn du es auf per std::cout << buffer ausgibst. Entweder verwende einen nullterminierten Puffer oder verwende std::ostream::write .

    Grüssli


Log in to reply