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