Функция fgets в c

3 ответа

Лучший ответ

— считывает до символов из указанного потока в буфер, включая завершающий символ новой строки, если есть место. Добавляет терминатор 0 в конец буфера, делая его допустимой строкой C:

В случае успеха возвращает адрес входного буфера. При сбое или конце файла возвращается .

— считывает одиночный символ из указанного входного потока и возвращает его:

— устарел после C99, полностью удален из C2011. Как и , он считывал последовательность символов из стандартного ввода в буфер и добавлял терминатор 0, но в отличие от он не предоставлял механизма ограничения ввода, что делало его популярным эксплойтом вредоносного ПО. Кроме того, он не сохранит завершающую новую строку в буфере. Его использование гарантировало появление точки отказа в вашем коде. Представьте, что вы никогда об этом не слышали.

— идентично , за исключением того, что он может быть реализован как макрос.

— считывает один символ из стандартного ввода:

— записывает строку в указанный выходной поток:

— записывает один символ в указанный выходной поток:

— идентично , за исключением того, что он может быть реализован как макрос

— записывает один символ в стандартный вывод.

2

John Bode
30 Авг 2016 в 14:31

Считывает символы из потока и сохраняет их в виде строки C в str до тех пор, пока не будут прочитаны (num-1) символы или не будет достигнут перевод строки или конец файла, в зависимости от того, что наступит раньше. Символ новой строки заставляет fgets перестать читать, но считается допустимым символом и поэтому включается в строку, скопированную в str. Нулевой символ автоматически добавляется в str после прочитанных символов, чтобы обозначить конец строки C.

Записывает в поток строку, на которую указывает str. Функция начинает копирование с указанного адреса (str), пока не достигнет завершающего нулевого символа (‘\ 0’). Этот последний нулевой символ не копируется в поток.

Получить символ из стандартного ввода. Возвращает следующий символ из стандартного ввода (stdin). Это эквивалентно getc с аргументом stdin.

Записать символ в stdout Записывает символ в текущую позицию в стандартном выводе (stdout) и перемещает внутренний индикатор позиции файла на следующую позицию. Эквивалентен putc (character, stdout).

: из стандартного ввода в память

: из памяти в стандартный ввод

1

khakishoiab
26 Окт 2016 в 19:00

— это функция, которая предлагает нажать клавишу, в которой символ не отображается эхом.

Напротив, будет повторять символ обратно.

будет читать символы из , но это небезопасно (используйте вместо этого ).

вернет следующий символ, который он считывает из , это то же самое, что и вызов с в качестве аргумента.

считывает символы из потока (например, файла или ) и сохраняет их как строку C в до тех пор, пока не будут прочитаны (num-1) символы или символы новой строки или достигнуто.

записывает символ в . Это то же самое, что вызов с в качестве аргумента.

записывает строку C, на которую указывает , в и добавляет символ новой строки. Он начинает копирование до тех пор, пока не достигнет нулевого конца (). Нуль-терминатор не печатается.

записывает строку C, на которую указывает в поток, и по сути похож на

Что касается вашего кода, старайтесь избегать использования , так как это небезопасно, и используйте , то же самое касается . Вместо этого используйте .

Я знаю, что это ссылка на C ++, но функции библиотеки такие же

2

Garf365
30 Авг 2016 в 10:25

fgets ()

As все остальные говорили, каноническая альтернатива is задание как файловый поток.

то, о чем еще никто не упоминал, это не включает новую строку, но делает. Таким образом, вам может потребоваться использовать обертку вокруг это удаляет новую строку:

или, лучше:

также, как caf указывает в комментарий paxdiablo показывает в своем ответе, с возможно, у вас остались данные на линии. Мой код оболочки оставляет эти данные для чтения в следующий раз; вы можете легко изменить его, чтобы проглотить остальную часть строки данных, если хотите:

остаточная проблема заключается в том, как сообщить о трех различных состояниях результата — EOF или error, line read and not truncated, и partial line read but data was truncated.

эта проблема не возникает с потому что он не знает, где ваш буфер заканчивается и весело топчет за концом, нанося хаос на ваш красиво ухоженный макет памяти, часто путаясь в обратном стеке (a Переполнение Стека), если буфер выделен в стеке, или вытаптывание управляющей информации, если буфер динамически выделен, или копирование данных по другим ценным глобальным (или модульным) переменным, если буфер статически выделен. Ни одна из них не является хорошей идеей — они воплощают фразу » undefined поведение.`

есть еще TR 24731-1 (технический доклад Комитета по стандартам C), который обеспечивает более безопасные альтернативы различным функциям, включая :

Рейтинг
( Пока оценок нет )
Понравилась статья? Поделиться с друзьями:
Мой редактор ОС
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: