Einführung
Wir sind alle mit der Funktion scanf()
vertraut. Es ist die Hauptfunktion zur Eingabe grundlegender Benutzerdaten. Obwohl scanf()
gut funktioniert, wenn es Eingaben wie Ganzzahlen, Zeichen, Gleitkommazahlen usw. entgegennimmt, hinkt es definitiv hinterher, wenn es Zeichenketten mit Leerzeichen enthält. Werfen wir einen Blick auf ein Beispiel,
#include<stdio.h>
int main()
{
char string[10];
printf("Enter the string: ");
scanf("%s", string);
printf("\n %s",string);
return 0;
}
Ausgabe:

Wie wir aus dem obigen Beispiel sehen können, stoppt scanf()
das Scannen, sobald es auf ein Leerzeichen oder einen Zeilenumbruch stößt. Dies macht das Eingeben von Zeichenketten mit scanf()
tatsächlich etwas umständlich. Dies kann leicht vermieden werden, indem andere Eingabefunktionen wie gets()
und fgets()
verwendet werden.
In diesem Artikel werden wir lernen, wie man beide Funktionen anwendet und sie miteinander vergleicht.
gets() Funktion in C
gets()
ist eine vordefinierte Funktion in C, die dazu dient, eine Zeichenkette oder eine Textzeile einzulesen und die Eingabe in einer wohldefinierten Zeichenkettenvariable zu speichern. Die Funktion beendet ihre Leseaktion, sobald sie auf ein Zeilenumbruchzeichen stößt.
Syntax:
gets( Variablenname );
Der bereitgestellte Code unten veranschaulicht die Verwendung der Funktion gets()
.
#include<stdio.h>
int main()
{
char string[10];
printf("Enter the String: ");
gets(string);
printf("\n%s",string);
return 0;
}
Ausgabe:

Vergleichen Sie die Ausgabe mit der Verwendung von scanf()
. ‚Hello World‘ wird nun als eine Zeichenkette behandelt.
Funktion fgets() in C
Die Standard-C-Bibliothek stellt uns auch eine weitere Funktion zur Verfügung, nämlich die Funktion fgets()
. Die Funktion liest eine Textzeile oder eine Zeichenkette aus der angegebenen Datei oder Konsole. Und speichert sie dann in der entsprechenden Zeichenkettenvariable.
Ähnlich wie die Funktion gets()
beendet fgets das Lesen, wenn es auf ein Zeichen für einen Zeilenumbruch trifft. Aber zusätzlich stoppt die Funktion, im Gegensatz zu gets()
, auch wenn EOF erreicht ist oder wenn die Zeichenkettenlänge die angegebene Grenze, n-1, überschreitet.
Syntax,
fgets(char *str, int n, FILE *stream)
- str – Es ist die Variable, in der die Zeichenkette gespeichert wird
- n – It is the maximum length of the string that should be read
- stream – Es ist der Dateihandle, von dem die Zeichenkette gelesen werden soll.
Zum Glück können wir sowohl Textzeilen aus einer Datei als auch aus dem Standard-Eingabestrom lesen, indem wir die Funktion fgets()
verwenden. Schauen wir uns an, wie das geht.
1. Lesen Sie aus einer gegebenen Datei mit fgets()
Zum Beispiel,
#include<stdio.h>
int main()
{
char string[20];
FILE *fp;
fp=fopen("file.txt","r");
fgets(string,20,fp);
printf("The string is: %s",string);
fclose(fp);
return 0;
}
Betrachten Sie die Datei file.txt, die die Zeile ‘JournalDev fgets() Beispiel!’ enthält. In diesem Fall wäre die Ausgabe des obigen Codes,

2. Lesen Sie aus stdin mit fgets()
#include<stdio.h>
int main()
{
char string[20];
printf("Enter the string: ");
fgets(string,20,stdin); #input from stdin stream
printf("\nThe string is: %s",string);
return 0;
}
Ausgabe:

Schlussfolgerung
Auch wenn beide Funktionen, gets()
und fgets()
, zum Lesen von Zeichenketten verwendet werden können, besteht der größte Unterschied zwischen den beiden darin, dass letztere dem Benutzer die Angabe der Puffergröße ermöglicht. Daher wird sie gegenüber der Funktion gets()
dringend empfohlen.
Die Funktion gets()
bietet keine Möglichkeit für den Fall, dass die Eingabe größer ist als der Puffer. Dadurch kann es zu Speicherüberlauf kommen. Hier glänzt die Funktion fgets()
und bietet eine optimale Lösung.
Referenzen
Source:
https://www.digitalocean.com/community/tutorials/fgets-and-gets-in-c-programming