All | _ | A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z
fgets – чтение строки из указанного потока данных.
#include int fgets (char *str, int n, FILE *stream);
В случае успешного чтения строки, возвращается указатель на массив, в который помещены считанные данные (возвращается аргумент s).
Если достигнут конец файла, а данные не были считаны, то возвращается NULL.
Если при чтении данные произошла ошибка, то возвращается NULL, а в переменную errno записывается код ошибки. При этом состояние массива, в который должна была сохраниться считанная строка, неопределенно.
Функция fgets считывает из потока данных строку пока не встретится символ «новая строка» или не закончится файл или пока длина считываемой строки не превысит ограничение аргумента n (считывается не более чем n-1 символов).
После последнего прочитанного символа в массив s заносится признак конца строки (нулевой символ).
Если достигнут конец файла и несчитан не один символ или произошла ошибка, то возвращается NULL. Для того, чтобы отличить конец файла от ошибки используются функции feof и ferror.
В примере из заранее созданного файла test.txt располагающегося в одной папке с программой считываются данные с помощью функции fgets, пока не будет достигнут конец файла.
В файл заранее записаны следующие строки:       Тест чтения.       Проверка работы функции fgets.
Считанные данные и отчет о работе выводятся на консоль.
Открытие файла: выполнено Считаны строки:            Тест чтения.            Проверка работы функции fgets. Чтение файла закончено Закрытие файла: выполнено
fgetws — это версия функции fgets для расширенных символов.
Функция fgetws считывает аргумент str для расширенных символов как многобайтовый или расширенный символ, в зависимости от того, открыт ли stream в текстовом или двоичном режиме соответственно. Дополнительные сведения об использовании текстового и двоичного режима в Юникоде и многобайтовом потоковом вводе-выводе см. в разделах Файловый ввод-вывод в текстовом и двоичном режиме и Ввод-вывод в поток в кодировке Юникод в текстовом и двоичном режиме.
По умолчанию глобальное состояние этой функции ограничивается приложением. Чтобы изменить это, см. раздел глобальное состояние в CRT.
Универсальное текстовое сопоставление функций
TCHAR.H ассемблер
_UNICODE & _MBCS не определено
_MBCS определяется
_UNICODE определяется
_fgetts
fgets
fgets
fgetws
Требования
Функция
Обязательный заголовок
fgets
fgetws
или
Дополнительные сведения о совместимости см. в статье Compatibility.
Каждая из этих функций считывает один символ из текущей позиции файла, связанного с потоком. Функция затем увеличивает указатель связанного файла (если определен), чтобы он указывал на следующий символ. Если поток находится в конце файла, для него устанавливается индикатор конца файла.
fgetc эквивалентен getc, но реализуется только как функция, а не как функция и макрос.
fgetwc — это версия fgetcдля расширенных символов; Он считывает c в виде многобайтового символа или расширенного символа в зависимости от того, открыт ли поток в текстовом или двоичном режиме.
Версии с суффиксом _nolock идентичны за исключением того, что они не защищены от помех со стороны других потоков.
Дополнительные сведения об обработке расширенных и многобайтовых символов в текстовом и двоичном режиме см. в разделе Ввод-вывод в поток в кодировке Юникод в текстовом и двоичном режиме.
По умолчанию глобальное состояние этой функции ограничивается приложением. Чтобы изменить это, см. раздел глобальное состояние в CRT.
Универсальное текстовое сопоставление функций
Подпрограмма TCHAR.H
&Не определено _UNICODE _MBCS
_MBCS определено
_UNICODE определено
_fgettc
fgetc
fgetc
fgetwc
Требования
Функция
Обязательный заголовок
fgetc
fgetwc
или
Дополнительные сведения о совместимости см. в статье Compatibility.
везде, где я вижу «это практически идентично», или что-то подобное.
в библиотеке GNU C есть еще одна функция, называемая fgetc. Он идентичен getc во многих отношениях, за исключением того, что getc обычно реализуется как макрофункция и сильно оптимизирован, поэтому предпочтительнее в большинстве ситуаций. (В ситуациях, когда вы читаете со стандартного ввода, getc примерно так же быстро, как fgetc, поскольку люди печатают медленно по сравнению с тем, как быстро компьютеры могут читать их ввод, но когда вы читаете из потока, который не интерактивно производится человеком, fgetc, вероятно, лучше.)
каковы другие различия? Я слышал, что у каждого из них есть другая реализация (и ее можно использовать как макрос), но что делает их настолько разными (или достаточно разными), чтобы они были в стандартной библиотеке C (или спецификации)?
3 ответов
С Advanced Programming in Unix Environment :
разницу между getc и fgetc это getc может быть реализован как макрос, тогда как fgetc не может быть реализован как макрос. Это означает три вещи:—10—>
похоже, что различия в 99,9% случаев бессмысленны.
это может привести к странному поведению в некоторых (не очень полезно) случаях, например:
если getc оценивает f++ более одного раза, он будет продвигать f более одного раза за итерацию. Для сравнения, fgetc безопасно в таких ситуациях.
есть по существу то же самое (или достаточно похожее, чтобы не беспокоиться). Вы должны посмотреть на их реализацию:GNU libc и MUSL библиотеки libc являются реализациями свободного программного обеспечения. И теперь они могут быть реализованы как встроенные функции (которые так же быстры, как макросы).
и я не буду так сильно беспокоиться. В реальной жизни ввод-вывод в основном ограничен оборудованием (например, временем доступа к диску).
Считывает символ из переданного указателя на файл.
Список параметров
Указатель на файл должен быть корректным и указывать на файл, успешно открытый функциями fopen() или fsockopen() (и всё ещё не закрытый функцией fclose() ).
Возвращаемые значения
Примеры
Пример #1 Пример использования функции fgetc()
Примечания
Замечание: Эта функция безопасна для обработки данных в двоичной форме.
Смотрите также
User Contributed Notes 5 notes
The best and simplest way to get input from a user in the CLI with only PHP is to use fgetc() function with the STDIN constant:
echo ‘Are you sure you want to quit? (y/n) ‘ ; $input = fgetc ( STDIN );
To read a single key-press in CLI mode, you can either use ncurses (which will probably require additional modules for PHP) or get nasty with the *nix «/bin/stty» command)
If you call fgetc(HANDLE) multiple times you must clear buffer before, thus get all unwanted chars to the new new line character.
//get first character from STDIN $first = fgetc(STDIN); >
You can’t just simple print separated characters of a text which is encoded in multibyte character set like this; Because fgetc() will break each multibyte character on its every byte. Consider this example: