Namespaces
Variants

fgets

From cppreference.net
< c ‎ | io
Определено в заголовочном файле <stdio.h>
char * fgets ( char * str, int count, FILE * stream ) ;
(до C99)
char * fgets ( char * restrict str, int count, FILE * restrict stream ) ;
(начиная с C99)

Считывает не более count - 1 символов из заданного файлового потока и сохраняет их в массиве символов, на который указывает str . Разбор прекращается, если встречается символ новой строки (в этом случае str будет содержать этот символ новой строки) или при достижении конца файла. Если байты считаны и ошибок не произошло, записывает нулевой символ в позицию сразу после последнего записанного символа в str .

Содержание

Параметры

str - указатель на элемент массива char
count - максимальное количество символов для записи (обычно длина str )
stream - файловый поток для чтения данных

Возвращаемое значение

str при успехе, нулевой указатель при неудаче.

Если встречается условие конца файла, устанавливает индикатор eof на stream (см. feof() ). Это считается ошибкой только если не было прочитано ни одного байта, в этом случае возвращается нулевой указатель и содержимое массива, на который указывает str не изменяется (т.е. первый байт не перезаписывается нулевым символом).

Если сбой был вызван какой-либо другой ошибкой, устанавливает индикатор ошибки (см. ferror() ) на stream . Содержимое массива, на который указывает str , является неопределённым (он может даже не быть нуль-терминированным).

Примечания

POSIX дополнительно требует , чтобы fgets устанавливал errno при возникновении ошибки чтения.

Хотя стандартная спецификация неясна в случаях, когда count <= 1 , распространённые реализации

  • если count < 1 , ничего не делать, сообщить об ошибке,
  • если count == 1 ,
  • некоторые реализации ничего не делают, сообщают об ошибке,
  • другие ничего не читают, сохраняют ноль в str [ 0 ] , сообщают об успехе.

Пример

#include <stdio.h>
#include <stdlib.h>
int main(void)
{
    FILE* tmpf = tmpfile();
    fputs("Alan Turing\n", tmpf);
    fputs("John von Neumann\n", tmpf);
    fputs("Alonzo Church\n", tmpf);
    rewind(tmpf);
    char buf[8];
    while (fgets(buf, sizeof buf, tmpf) != NULL)
          printf("\"%s\"\n", buf);
    if (feof(tmpf))
       puts("End of file reached");
}

Вывод:

"Alan Tu"
"ring
"
"John vo"
"n Neuma"
"nn
"
"Alonzo "
"Church
"
End of file reached

Ссылки

  • Стандарт C23 (ISO/IEC 9899:2024):
  • 7.21.7.2 Функция fgets (стр.: TBD)
  • Стандарт C17 (ISO/IEC 9899:2018):
  • 7.21.7.2 Функция fgets (стр: 241)
  • Стандарт C11 (ISO/IEC 9899:2011):
  • 7.21.7.2 Функция fgets (стр: 331)
  • Стандарт C99 (ISO/IEC 9899:1999):
  • 7.19.7.2 Функция fgets (стр: 296)
  • Стандарт C89/C90 (ISO/IEC 9899:1990):
  • 4.9.7.2 Функция fgets

Смотрите также

читает форматированный ввод из stdin , файлового потока или буфера
(функция)
(удалена в C11) (C11)
читает строку символов из stdin
(функция)
записывает строку символов в файловый поток
(функция)
читает из потока в автоматически изменяемый буфер до разделителя/конца строки
(функция)