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.