fgets() és gets() a C programozásban
Bevezetés
A C programozásban a fgets()
és a gets()
függvények a felhasználó által beírt szöveg beolvasására szolgálnak. Mindkét függvény a stdin szabványos bemeneti stream-ből olvas be adatokat, de másképp viselkednek a beírt szöveg feldolgozása tekintetében. A fgets()
függvény egy megadott hosszúságú karakterláncot olvas be, míg a gets()
függvény a felhasználó által megnyomott Enter billentyűig olvas be adatokat.
Ebben a cikkben részletesen megvizsgáljuk a fgets()
és a gets()
függvények működését, felhasználási eseteiket és különbségeiket. Emellett bemutatunk néhány példát a függvények használatára, hogy segítsünk megérteni a gyakorlati alkalmazásukat.
A fgets() függvény
A fgets()
függvény a következő szintaxis szerint használható:
c
char fgets(char *str, int n, FILE stream);
* str: Egy karaktertömb címe, amely a beolvasott szöveget fogja tárolni.
* n: A beolvasandó karakterek maximális száma a terminátor karakterrel együtt.
* stream: Az a FILE típusú stream, amelyből a szöveget be szeretnénk olvasni. Alapértelmezés szerint ez a stdin szabványos bemeneti stream.
A fgets()
függvény a stream
-ből beolvas n-1
karaktert, vagy amíg el nem éri az első új sor karaktert (\n
). Ezután a függvény egy terminátor karaktert (\0
) fűz a beolvasott szöveghez, és visszaadja a str
karaktertömb címét.
A gets() függvény
A gets()
függvény a következő szintaxis szerint használható:
c
char gets(char str);
* str: Egy karaktertömb címe, amely a beolvasott szöveget fogja tárolni.
A gets()
függvény a stdin
szabványos bemeneti stream-ből olvas be adatokat, amíg el nem éri az első új sor karaktert (\n
) vagy a fájl végét (EOF). Ezután a függvény egy terminátor karaktert (\0
) fűz a beolvasott szöveghez, és visszaadja a str
karaktertömb címét.
Különbségek a fgets() és a gets() függvények között
A fgets()
és a gets()
függvények közötti legfontosabb különbségek a következők:
* Beolvasási hosszúság: A fgets()
függvény egy meghatározott hosszúságú karakterláncot olvas be, míg a gets()
függvény a felhasználó által megnyomott Enter billentyűig olvas be adatokat.
* Új sor karakter: A fgets()
függvény az új sor karaktert a beolvasott szövegbe menti, míg a gets()
függvény eltávolítja az új sor karaktert a beolvasott szövegből.
* Buffer túlcsordulás: A gets()
függvény nem ellenőrzi a beolvasott szöveg hosszát, ami buffer túlcsorduláshoz vezethet, ha a felhasználó túl sok karaktert ír be. A fgets()
függvény ellenőrzi a beolvasott szöveg hosszát, és levágja a szöveget, ha az meghaladja a megadott hosszúságot.
A fgets() és a gets() függvények használati esetei
A fgets()
függvényt általában olyan esetekben használják, amikor a beolvasandó szöveg hosszát előre tudjuk. Ez lehetővé teszi számunkra, hogy pontosan annyi karaktert olvassunk be, amennyire szükségünk van, és elkerüljük a buffer túlcsordulását. A fgets()
függvény hasznos lehet szövegfájlok olvasásánál vagy olyan felhasználói bevitelek kezelésénél, ahol a bevitel hosszát korlátozni kell.
A gets()
függvény akkor hasznos, ha nem ismerjük a beolvasandó szöveg hosszát, vagy ha a felhasználónak meg szeretnénk engedni, hogy tetszőleges hosszúságú szöveget írjon be. A gets()
függvény használata azonban óvatos megfontolást igényel, mivel buffer túlcsorduláshoz vezethet, ha a felhasználó túl sok karaktert ír be.
Példák
Az alábbi példák bemutatják a fgets()
és a gets()
függvények használatát:
c
#include <stdio.h>
int main() {
char str[100];
// fgets() függvény használata
fgets(str, 100, stdin);
printf("Beolvasott szöveg fgets() használatával: %s", str);
// gets() függvény használata
gets(str);
printf("Beolvasott szöveg gets() használatával: %s", str);
return 0;
}
Következtetés
A fgets()
és a gets()
függvények értékes eszközök a C programozásban a felhasználó által beírt szöveg beolvasására. A fgets()
függvény használata ajánlott, ha a beolvasandó szöveg hosszát előre tudjuk, és korlátozni szeretnénk a beolvasott szöveg hosszát. A gets()
függvény hasznos, ha a beolvasandó szöveg hosszát nem ismerjük, de óvatosan kell használni a buffer túlcsordulás elkerülése érdekében. A cikkben bemutatott példák és a függvények közötti különbségek megértése segít a fejlesztőknek a fgets()
és a gets()
függvények hatékony használatában a C programjaikban.
GYIK
* Mi a különbség a fgets()
és a gets()
függvények között?
A fgets()
függvény egy megadott hosszúságú karakterláncot olvas be, míg a gets()
függvény a felhasználó által megnyomott Enter billentyűig olvas be adatokat.
* Melyik függvényt kell használnom?
A fgets()
függvényt használja, ha a beolvasandó szöveg hosszát előre tudja, és el szeretné kerülni a buffer túlcsordulását. A gets()
függvényt használja, ha a beolvasandó szöveg hosszát nem ismeri, vagy ha a felhasználónak meg szeretné engedni, hogy tetszőleges hosszúságú szöveget írjon be.
* Hogyan kerülhető el a buffer túlcsordulás a gets()
függvény használata esetén?
Ellenőrizze a felhasználó által beírt karakterek számát, és szükség esetén vágja le a karakterláncot a maximális hosszon belülre.
* Mi az a terminátor karakter?
A terminátor karakter (\0
) egy speciális karakter, amely a C karakterláncok végét jelzi.
* Miért hasznos a fgets()
függvény a fájlok olvasásához?
A fgets()
függvény lehetővé teszi, hogy soronként olvassa be a fájlokat, ami hasznos lehet a fájlok feldolgozásához.
* Hogyan olvassak be több sort egy fájlból a fgets()
függvény használatával?
Egy ciklusban használja a fgets()
függvényt, amíg a függvény nem ad vissza NULL
értéket, ami a fájl végét jelzi.
* Miért nem ajánlott a gets()
függvény használata?
A gets()
függvény nem ellenőrzi a beolvasott szöveg hosszát, ami buffer túlcsorduláshoz vezethet.
* Milyen alternatívái vannak a gets()
függvénynek?
A fgets()
függvény, a getline()
függvény és a scanf()
függvény alternatívák a gets()
függvény helyett.