Frage zu fgets()



  • Da ich gelesen habe, dass gets() sehr unsicher ist, will ich fgets() verwenden. Jedoch funktionieren meine Programme jetzt nicht mehr wie vorher.
    Ein Beispiel:

    #include <stdio.h>
    
    int main(void) {
    	FILE *dateiPtr;
    	char datei[67];
    
    	printf("\nName der zu oeffnenden Datei> ");
    	/* fgets(datei, 67,stdin); */
    	gets(datei);	
    	dateiPtr = fopen(datei, "r");	
    
    	if (dateiPtr != NULL) {
    		printf("\nDatei %s wurde geoeffnet !\n", datei);
    		fclose(dateiPtr);
    	} else {
    		printf("\n%s laesst sich nicht oeffnen !\n", datei);
    	}
    
    }
    

    Mit gets() werden meine Dateien geöffnet. Bei gleicher Eingabe funktioniert dies mit fgets() nicht.



  • fgets hängt meistens ein '\n' an das Ende des Strings, der Dateiname wird somit verfälscht, die Datei nicht gefunden.



  • Danke, das Problem ist gelöst.

    #include <stdio.h>
    #include <string.h>
    
    void clean(char *str) {
       size_t p=strlen(str);
       str[p-1]='\0';
    }
    
    int main(void) {
    	FILE *dateiPtr;
    	char datei[67];
    
    	printf("\nName der zu oeffnenden Datei> ");
    	fgets(datei, 67,stdin); 
    	clean(datei);
    	dateiPtr = fopen(datei, "r");	
    
    	if (dateiPtr != NULL) {
    		printf("\nDatei %s wurde geoeffnet !\n", datei);
    		fclose(dateiPtr);
    	} else {
    		printf("\n%s laesst sich nicht oeffnen !\n", datei);
    	}
    }
    


  • kaenon schrieb:

    Danke, das Problem ist gelöst.

    Wenn du 66*Zeichen eingibst, wird das '\n' nicht mit abgelegt. Es bleibt im Eingabestrom stehen und kann da für Unsinn sorgen.

    *Wenn du mehr Zeichen eingibst, als du fgets erlaubt hast zu lesen.
    Dann ist das fehlende '\n' der Indikator dafür.


Anmelden zum Antworten