fgets

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до навігації Перейти до пошуку

fgets — функція стандартної бібліотеки C, призначена для зчитування рядка з потоку. Прототип функції описаний у заголовному файлі stdio.h. Він має вигляд:

char * fgets (char * str, int num, FILE * stream);

Агрументи:

  • char * str — вказівник на буфер, в який зчитується рядок. Його максимальна довжина задається другим аргументом.
  • int num — число, що обмежує кількість символів, які повинні бути зчитані.
  • FILE * stream — вказівник на дескриптор файлу, з якого проводиться зчитування. Файл повинен бути відкритим.

У випадку успішного виконання функція повертає вказівник на зчитаний рядок, у разі невдачі — NULL.

Функція зчитує символи з потоку, доки не зустріне символ переводу рядка або кінця файлу, або доки не заповниться буфер. Максимальне число символів, які може зчитати fgets дорівнює N-1. У випадку, коли N-1 символ зчитано, а в потоці ще є символи, fgets поміщає 0 в N-ий байт буфера str і завершує роботу. У випадку, коли рядок вхідного потоку закінчився, а буфер str ще не заповнено, функція поміщає в буфер символ кінця рядка '\n', а після нього — 0.

Рекомендації використання[ред. | ред. код]

Функція fgets найбезпечніша функція зчитування в C. На відміну від функції gets одним із її аргументів є обмежувач числа символів, які потрібно зчитати, тому небезпека переповнення буферу набагато менша. Функцією fgets рекомендується зчитувати не тільки рядки з файлів, а й рядки з вхідного потоку stdin. У цьому випадку виклик функції має вигляд:

 result = fgets(str, num, stdin);

Функцію fgets рекомендується використовувати і в тому випадку, коли з файла потрібно зчитати число. Оскільки програміст, який пише програму, не може бути впевненим, що в файлі, вказаному коритувачем, завжди буде правильна очікувана інформація, безпечно спочатку зчитати вхідний рядок як рядок, проаналізувати його, а потім зчитати потрібні числа уже з буфера.

Приклад[ред. | ред. код]

# include <stdio.h>
# DEFINE MAX_LEN 100
int main()
{
   FILE * pFile;
   char mystring [MAX_LEN +1];

   pFile = fopen ("myfile.txt" , "r");
   if (pFile == NULL) perror ("Error opening file");
   else {
     fgets (mystring , MAX_LEN +1 , pFile);
     puts (mystring);
     fclose (pFile);
   }
   return 0;
}

Див. також[ред. | ред. код]