fgets() і gets() мовою C
Для читання рядкового значення з пробілами ми можемо використовувати gets() або fgets() мовою програмування C. Тут ми побачимо різницю між gets() і fgets().
fgets()
Функція fgets() читає рядок із зазначеного потоку та зберігає його в рядок, на який вказує str. Він зупиняється, коли прочитано (n-1) символів, символ нового рядка або досягнуто кінця файлу, залежно від того, що станеться раніше.
Синтаксис
char * fgets (char * str , int n , FILE * stream );
Параметри
- str: покажчик на масив символів, куди копіюється прочитаний рядок. n: Максимальна кількість символів, які потрібно скопіювати в str (включно з кінцевим нульовим символом). *потік: покажчик на об’єкт FILE, який ідентифікує вхідний потік.
Примітка: stdin може використовуватися як аргумент для читання зі стандартного введення.
Повернене значення
- Функція fgets() повертає вказівник на рядок, де зберігається вхід.
Особливості fgets()
- Він відповідає деяким параметрам, таким як максимальна довжина, буфер і посилання на пристрій введення.
- Це є безпечний використовувати, оскільки він перевіряє прив’язку масиву.
- Він продовжує читати, доки не зустрінеться символ нового рядка або максимальна межа масиву символів.
Приклад fgets()
Скажімо, максимальна кількість символів становить 15, а довжина вхідних даних перевищує 15, але fgets() все одно прочитає лише 15 символів і надрукує їх.
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;> }> |
Оскільки fgets() зчитує вхідні дані від користувача, нам потрібно забезпечити введення під час виконання.
Input: Hello and welcome to techcodeview.com Output: string is: Hello and welc
отримує()
Читає символи зі стандартного вводу (stdin) і зберігає їх як рядок C у str, доки не буде досягнуто символ нового рядка або кінець файлу.
- Його небезпечно використовувати, оскільки він не перевіряє межі масиву.
- Він використовується для читання рядків від користувача, доки символ нового рядка не зустрічається.
Синтаксис
char * gets ( char * str );
Параметри
- str: покажчик на блок пам’яті (масив char), де прочитаний рядок копіюється як рядок C.
Повернене значення
- Функція повертає вказівник на рядок, де зберігаються вхідні дані.
Приклад gets()
Припустімо, що у нас є масив із 15 символів, а вхідні дані більше ніж 15 символів, gets() прочитає всі ці символи та збереже їх у змінній. Оскільки gets() не перевіряє максимальний ліміт вхідних символів, у будь-який час компілятор може повернути помилку переповнення буфера.
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;> }> |
Оскільки gets() зчитує введення від користувача, нам потрібно надати введення під час виконання.
Input : Hello and welcome to techcodeview.com Output : Hello and welcome to techcodeview.com
Висновок
Функції fgets() і gets() можна використовувати для читання рядкового введення зі стандартного введення. Основна відмінність між функціями fgets() і gets() полягає в тому, що функція fgets() дозволяє користувачеві вказати максимальну кількість символів для читання, і ми також можемо змінити вхідний потік на будь-який файл у fgets().