Fehler beim Datei öffnen



  • bekomme immer wieder den gleichen fehler im letzten abschnitt
    meiner funktion()...immer wenn ich versuche eine datei zu öffnen
    deren pfad ich aus einer externen datei auslese...
    ...woran könnte das hängen?

    //Mp3 Suche-Funktion
    //---------------------------------------------------------------
    //
    //----------------------------------------------------------------
    int mp3Suche(struct listenkopf *head)
    
    {
    
    	int y;
    
    	char befehl[1000] = "dir ";
    	char pfad[200];
    	char pfad2[255];
    	char befehl1[26] = "*.mp3 /s/b/o:n >mp3s.dat";
    	char leer01[3] = "\n\n";
    
    	struct listenelement *ptrElement;
    	struct DATEN *dataptr;
    
    	//Eingabe des Pfades
    	printf("Bitte zu durchsuchenden Pfad angeben: ");
    	gets(pfad);
    
    	//zusamensetzen des befehls
    	strcat(befehl,pfad);
    	strcat(befehl,befehl1);
    	strcat(befehl,leer01);
    
    	//suche nach MP3´s
    	printf("Bitte warten...Mp3s werden gesucht");
    	system(befehl);
    	printf("Fertig!\n\n");
    
    	//endpunkt setzen
    	FILE *datei;
    	datei=fopen("mp3s.dat","a");
    	fprintf(datei,"END");
    	fclose(datei);
    
    	//übertragen der Pfade an die Funktion id3(FILE *datei_ptr)
    	datei=fopen("mp3s.dat","rb");
    	FILE *pfile;
    
    	while(strcmp(pfad2,"END")!=0)
    	{
    		fgets(pfad2,255,datei);
    		if(strcmp(pfad2,"END")!=0)
    		{			
    			pfile=fopen("pfad2","rb");
    			if(pfile==0)
    			{
    				printf("Fehler beim öffnen von %s\n",pfad2);
    				getch();
    			}
    			else
    			{
    			ptrElement=newelement();
    			dataptr=id3(pfile);
    			adddata(dataptr, ptrElement); 
    			y=ElementCount(head);
    			einhangen(head, ptrElement, y+1);
    			}
    
    		}
    	}
    
    	fclose(datei);
    	return 0;
    }
    


  • Vielleicht daran? 😉

    smilingman schrieb:

    pfile=fopen("pfad2","rb");
    

    In C ist es übrigens nicht erlaubt Variablen mitten im Block zu definieren! Du machst das aber zwei mal:
    ...
    FILE *datei;
    ...
    FILE *pfile;
    ...

    gets() sollte man übrigens nicht verwenden, da es keine Bufferoverflows abfangen kann. Stattdessen nimmt man fgets() mit stdin als Parameter für den stream (FILE *).

    In deinem Fall kannst du den Bufferoverflow sogar kenntlich machen. Gib mal bei der Eingabe von Pfad ca. 475 Zeichen ein (Bei den letzten 20 Zeichen schreibst du "Das ist ein Overflow" und gib mal befehl aus, nachdem du den Befehl zusammengesetzt hast. Wenn deine Variablen im Speicher genau hintereinander liegen, dann sollte dein Satz wieder auftauchen 🕶 .


Anmelden zum Antworten