Что возвращает fgets
Получает строку из потока байтов.
Синтаксис
char *fgets( char *string, int n, FILE *stream ); wchar_t *fgetws( wchar_t *string, int n, FILE *stream );
Параметры
string
Место хранения для данных.
Максимальное число символов для чтения.
stream
Указатель на структуру FILE.
Возвращаемое значение
Каждая из этих функций возвращает строку. NULL возвращается, чтобы указать ошибку или условие метки конца файла. Используйте функции feof или ferror, чтобы установить, имела ли место ошибка.
Замечания
Функция fgets читает строку из параметра входного потока и хранит её в строке. fgets читает символы от текущей потоковой позиции до конца потока байтов и включает в себя первый символ новой строки, или до тех пор, пока число прочитанных символов не будет равно n – 1, что бы не было на первом месте. Результат, сохраненный в строке, добавляется в конец с нулевым символом. Символ новой строки, если прочитано, включается в строку.
fgetws — широкосимвольная версия fgets.
fgetws читает широкосимвольный параметр string как строку, состоящую из многобайтовых символов или широкосимвольную строку согласно тому, открыт ли поток байтов в текстовом режиме или режиме двоичного счета, соответственно. Дополнительную информацию об использовании режимов текста и двоичного счета в Unicode и мультибайтовом «потоковом вводе — выводе», см. в статьях Файловый ввод-вывод (I/O) в режиме текста и двоичного счета и Ввод — вывод (I/O) потока байтов в Unicode в режимах текста и двоичного счета .
Унифицированно-текстовые стандартные отображения
СтандартныйTCHAR.H | _UNICODE & _MBCS не определен | _MBCS определен | _UNICODE определен |
---|---|---|---|
_fgetts | fgets | fgets | fgetws |
Функция Fgets в C
Программирование и разработка
На чтение 2 мин Просмотров 3к. Опубликовано 26.08.2021
Функция fgets определена в стандартной библиотеке C (stdio.h) и используется для чтения до n символов из указанного потока, такого как стандартный поток ввода или поток файлов) в строку, на которую указывает str.
Функция C fgets считывает символы до тех пор, пока не встретит конец файла (EOF), символ новой строки или когда будет прочитано n-1 символов.
В этом кратком руководстве будет рассказано, как использовать функцию fgets в программах на языке C.
Основное использование
Общий синтаксис функции C fgets показан ниже:
char * fgets ( char * str, int n, FILE * stream ) ;
Функция принимает три параметра, а именно:
- str -указатель на массив символов, куда добавляются считываемые строковые значения.
- n -целочисленное значение, определяющее максимальное количество символов, добавляемых к str. Максимальное количество включает завершающий символ null.
- stream -указатель, описывающий файловый объект для идентификации входного потока.
Возвращаемые значения Fgets
При успешном выполнении функция вернет str. Если функция обнаруживает ошибку, она возвращает нулевой указатель. Точно так же, если функция завершается из-за EOF без прочитанных символов, она возвращает нулевой указатель.
ПРИМЕЧАНИЕ. Хотя символ новой строки заставляет функцию fgets останавливаться, он по-прежнему включается в скопированную строку как допустимый символ.
Пример функции Fgets
Давайте проиллюстрируем, как использовать функцию fgets в C. Рассмотрим пример кода, показанный ниже:
#include
intmain ( ) <
FILE * fptr ;
char str [ 100 ] ;// open file for read
fptr = fopen ( «fgets.txt» , «r» ) ;
if ( fptr == NULL ) <
perror ( «[-] Error Encountered while opening file!» ) ;
return — 1 ;
>
else <
if ( fgets ( str , 100 , fptr ) != NULL ) <
puts ( str ) ;
>
fclose ( fptr ) ;
>
return0 ;
>
В приведенном выше примере функция fgets откроет файл fgets.txt, прочитает первые 100–1 (99) символов и распечатает их на экране.
Если предположить, что содержимое файла fgets.txt следующее:
Hello world!, this is fgets function in C.
Компиляция и выполнение приведенного выше кода должны распечатать строки выше.
СОВЕТ: в отличие от функции gets, функция fgets более безопасна, поскольку она проверяет границы массива, предотвращая переполнение буфера.
Заключение
В этом кратком руководстве описывается, как использовать функцию fgets на языке C для чтения символов из потока до тех пор, пока не будут выполнены определенные условия.
Что возвращает fgets
#include
int fgetc(FILE *stream);
char *fgets(char *s, int size, FILE *stream);
int getc(FILE *stream);
int getchar(void);
int ungetc(int c, FILE *stream);
ОПИСАНИЕ
Функция fgetc() считывает очередной символ из потока stream и возвращает unsigned char преобразованный в int, или EOF при достижении конца файла или при возникновении ошибки. Функция getc() похожа на fgetc(), но она может быть реализована как макрос, который определяет состояние stream более одного раза. Функция getchar() эквивалентна getc(stdin). Функция fgets() считывает максимум size -1 символов из stream и записывает их в буфер, на который указывает s. Чтение прерывается по достижении EOF или символа новой строки. Если получен символ новой строки, то он заносится в буфер. В конец буфера после последнего символа добавляется завершающий байт null (‘\0’). Функция ungetc() заносит c обратно в stream, преобразует в unsigned char, если это возможно для дальнейших операций чтения. Занесённые обратно символы будут возвращаться в обратном порядке; гарантируется только одно занесение символов. Вызовы функций, описанные здесь, могут смешиваться друг с другом и с другими функциями ввода из библиотеки stdio для того же потока ввода. Неблокирующие аналоги смотрите в unlocked_stdio(3).
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ
Функции fgetc(), getc() и getchar() возвращают символ, считанный как unsigned char и преобразованный в int, или EOF по достижении конца файла или при возникновении ошибки. Функция fgets() возвращает s при удачном выполнении и NULL при ошибке или если достигнут конец файла, а символы остались несчитанными. При успешном выполнении функция ungetc() возвращает c или EOF при ошибке.
АТРИБУТЫ
Описание терминов данного раздела смотрите в attributes(7).
Интерфейс | Атрибут | Значение |
fgetc(), fgets(), getc(), getchar(), ungetc() | безвредность в нитях | безвредно (MT-Safe) |
СООТВЕТСТВИЕ СТАНДАРТАМ
POSIX.1-2001, POSIX.1-2008, C89, C99. Не рекомендуется чередовать вызовы функций ввода библиотеки stdio с низкоуровневыми вызовами read(2) для дескриптора файла, связанного с потоком ввода; результат этого будет неопределённым и, скорее всего, не тем, который ожидается.
Функция fgets
Функция fgets считывает символы из потока и сохраняет их в виде строки в параметр string до тех пор пока не наступит конец строки или пока не будет достигнут конец файла.
Символ новой строки прекращает работу функции fgets , но он считается допустимым символом, и поэтому он копируется в строку string .
Нулевой символ автоматически добавляется в строку str после прочитанных символов, чтобы сигнализировать о конце строки.
Параметры:
- string
Указатель на массив типа char , в который сохраняются считанные символы. - num
Максимальное количество символов для чтения, включая нулевой символ. - filestream
Указатель на объект типа FILE , который идентифицирует поток, из которого считываются символы.
Для чтения из стандартного ввода, stdin может быть использован в качестве этого параметра.
Возвращаемое значение
В случае успеха, функция возвращает указатель на string . Если конец файла был достигнут и ни один символ не был прочитан, содержимое string остается неизменными и возвращается нулевой указатель. Если происходит ошибка, возвращается нулевой указатель.
Используйте функции ferror или feof для проверки, произошла ошибка или был достигнут конец-в-файла.
Пример: исходный код программы
//пример использования функции fgets #include int main() < FILE * ptrFile = fopen("file.txt" , "r"); char mystring [100]; if (ptrFile == NULL) perror("Ошибка открытия файла"); else < if ( fgets(mystring, 100, ptrFile) != NULL ) // считать символы из файла puts(mystring); // вывод на экран fclose (ptrFile); >return 0; >
Пример работы программы
Этот пример читает первую строку file.txt или первые 99 символов, в зависимости от того, какое из событий наступит раньше, и выводит их на экран.