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