Namespaces
Variants

fgets

С сайта ru.cppreference.net
< c | io
 
 
Файловый ввод/вывод
Типы и объекты
        
Функции
Доступ к файлу
(C95)
Неформатированный ввод/вывод
(C95)(C95)
(C95)
(C95)(C95)
(C95)
(C95)

Форматированный ввод
Прямой ввод/вывод
Форматированный вывод
Позиционирование в файле
Обработка ошибок
Операции с файлами
 
Определено в заголовке <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, не изменяется (т.е. первый байт не перезаписывается нулевым символом).

Если неудача вызвана другой ошибкой, устанавливается индикатор error (см. 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
(функция)
записывает строку в файловый поток
(функция)
чтение из потока в буфер с автоматическим изменением размера до разделителя/конца строки
(функция)