fgets
Определено в заголовочном файле <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 (стр.: уточняется)
- Стандарт 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
См. также
|
(C11)(C11)(C11) | считывает форматированный ввод из stdin, файлового потока или буфера (функция) |
|
(удалена в C11)(C11) | считывает строку символов из stdin (функция) |
| записывает строку символов в файловый поток (функция) |
|
|
(технический отчёт о динамической памяти) | считывает данные из потока в автоматически расширяемый буфер до разделителя или конца строки (функция) |
Документация по C++ для fgets |
|
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/c/io/fgets