fgets() és gets() a C programozásban

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.