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.

 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().