logo

fgets() i gets() w języku C

Do odczytania wartości ciągu znaków ze spacjami możemy użyć funkcji gets() lub fgets() w języku programowania C. Tutaj zobaczymy, jaka jest różnica między gets() i fgets().

fgets()

Funkcja fgets() odczytuje linię z określonego strumienia i zapisuje ją w ciągu znaków wskazanym przez str. Zatrzymuje się po odczytaniu jednego ze znaków (n-1), znaku nowej linii lub osiągnięciu końca pliku, w zależności od tego, co nastąpi wcześniej.



Składnia

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

Parametry

    str: Wskaźnik do tablicy znaków, do której kopiowany jest odczytany ciąg. n: Maksymalna liczba znaków do skopiowania do str (w tym kończący znak null). *stream: Wskaźnik do obiektu FILE, który identyfikuje strumień wejściowy.

Uwaga: standardowe może być użyty jako argument do odczytu ze standardowego wejścia.

Wartość zwracana

  • Funkcja fgets() zwraca wskaźnik do ciągu znaków, w którym przechowywane są dane wejściowe.

Funkcje fgets()

  • Podąża za niektórymi parametrami, takimi jak maksymalna długość, bufor i odniesienie do urządzenia wejściowego.
  • To jest bezpieczna użyć, ponieważ sprawdza powiązanie tablicy.
  • Czyta dalej, aż do napotkania nowego znaku linii lub maksymalnego limitu tablicy znaków.

Przykład fgets()

Załóżmy, że maksymalna liczba znaków wynosi 15, a długość wejściowa jest większa niż 15, ale mimo to fgets() odczyta tylko 15 znaków i wydrukuje je.

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;> }>

>

>

Ponieważ fgets() odczytuje dane wejściowe od użytkownika, musimy je podać w czasie wykonywania.

narzędzie do wycinania w Ubuntu
 Input: Hello and welcome to techcodeview.com Output: string is: Hello and welc>

dostaje()

Odczytuje znaki ze standardowego wejścia (stdin) i zapisuje je jako ciąg C w str aż do osiągnięcia znaku nowej linii lub końca pliku.

  • Nie jest bezpieczny w użyciu, ponieważ nie sprawdza powiązania tablicy.
  • Służy do odczytywania ciągów znaków od użytkownika, dopóki nie zostanie napotkany znak nowej linii.

Składnia

char * gets ( char * str  );>

Parametry

    str: Wskaźnik do bloku pamięci (tablicy znaków), gdzie odczytany ciąg jest kopiowany jako ciąg C.

Wartość zwracana

  • Funkcja zwraca wskaźnik do ciągu znaków, w którym przechowywane są dane wejściowe.

Przykład funkcji gets()

Załóżmy, że mamy tablicę znaków składającą się z 15 znaków, a wartość wejściowa jest większa niż 15 znaków, funkcja gets() odczyta wszystkie te znaki i zapisze je w zmiennej. Ponieważ funkcja gets() nie sprawdza maksymalnego limitu znaków wejściowych, kompilator może w każdej chwili zwrócić błąd przepełnienia bufora.

C++




// 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;> }>

>

>

Ponieważ funkcja gets() odczytuje dane wejściowe od użytkownika, musimy je podać w czasie wykonywania.

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

Wniosek

Do odczytywania ciągu znaków ze standardowego wejścia można używać funkcji fgets() i gets(). Główna różnica pomiędzy funkcją fgets() a funkcją gets() polega na tym, że funkcja fgets() pozwala użytkownikowi określić maksymalną liczbę znaków do odczytania, a także możemy zmienić strumień wejściowy na dowolny plik w fgets().