logo

fgets() și gets() în limbajul C

Pentru a citi o valoare șir cu spații, putem folosi fie gets() fie fgets() în limbajul de programare C. Aici, vom vedea care este diferența dintre gets() și fgets().

fgets()

fgets() citește o linie din fluxul specificat și o stochează în șirul indicat de str. Se oprește atunci când sunt citite fie (n-1) caractere, fie când este citit caracterul de nouă linie, fie când se ajunge la sfârșitul fișierului, oricare dintre acestea survine primul.



Sintaxă

char * fgets  (char * str , int n , FILE * stream );>

Parametrii

    str: Indicator către o matrice de caractere în care este copiat șirul citit. n: Numărul maxim de caractere de copiat în str (inclusiv caracterul nul final). *stream: pointer către un obiect FILE care identifică un flux de intrare.

Notă: stdin poate fi folosit ca argument pentru a citi din intrarea standard.

Valoare returnată

  • Funcția fgets() returnează un pointer către șirul în care este stocată intrarea.

Caracteristicile fgets()

  • Urmează câțiva parametri, cum ar fi lungimea maximă, tamponul și referința dispozitivului de intrare.
  • Este sigur de utilizat deoarece verifică matricea legată.
  • Continuă să citească până când este întâlnit un nou caracter de linie sau limita maximă a matricei de caractere.

Exemplu de fgets()

Să presupunem că numărul maxim de caractere este de 15 și lungimea de intrare este mai mare de 15, dar fgets() va citi doar 15 caractere și o va imprima.

C








// C program to illustrate fgets()> #include> #define MAX 15> int> main()> {> >// defining buffer> >char> buf[MAX];> >// using fgets to take input from stdin> >fgets>(buf, MAX, stdin);> >printf>(>'string is: %s '>, buf);> >return> 0;> }>

>

>

Deoarece fgets() citește intrarea de la utilizator, trebuie să furnizăm intrare în timpul rulării.

 Input: Hello and welcome to techcodeview.com Output: string is: Hello and welc>

devine()

Citește caracterele de la intrarea standard (stdin) și le stochează ca șir C în str până când se ajunge la un caracter newline sau la sfârșitul fișierului.

  • Nu este sigur de utilizat deoarece nu verifică matricea legată.
  • Este folosit pentru a citi șiruri de caractere de la utilizator până când nu este întâlnit un caracter newline.

Sintaxă

char * gets ( char * str  );>

Parametrii

    str: Indicator către un bloc de memorie (matrice de caractere) în care șirul citit este copiat ca șir C.

Valoare returnată

  • Funcția returnează un pointer către șirul în care este stocată intrarea.

Exemplu de gets()

Să presupunem că avem o matrice de caractere de 15 caractere și intrarea este mai mare de 15 caractere, gets() va citi toate aceste caractere și le va stoca într-o variabilă. Deoarece gets() nu verifică limita maximă de caractere introduse, compilatorul poate returna în orice moment eroarea de depășire a memoriei tampon.

C++

ankita dave




// C program to illustrate> // gets()> #include> #define MAX 15> int> main()> {> >// defining buffer> >char> buf[MAX];> >printf>(>'Enter a string: '>);> >// using gets to take string from stdin> >gets>(buf);> >printf>(>'string is: %s '>, buf);> >return> 0;> }>

>

>

Deoarece gets() citește intrarea de la utilizator, trebuie să furnizăm intrare în timpul rulării.

 Input : Hello and welcome to techcodeview.com Output : Hello and welcome to techcodeview.com>

Concluzie

Atât funcțiile fgets() cât și gets() pot fi utilizate pentru citirea șirurilor de caractere de la intrarea standard. Principala diferență dintre funcția fgets() și funcția gets() este că funcția fgets() permite utilizatorului să specifice numărul maxim de caractere de citit și, de asemenea, putem schimba fluxul de intrare în orice fișier din fgets().