memchr
(с небольшим количеством вашего собственного кода оболочки, оканчивающегося на memcpy
) является точным эквивалентом - подобно fgets
требуется максимальная длина, которую он будет обрабатывать (должен быть минимум оставшегося входного буфера размер и размер вашего выходного буфера) и сканирует, пока он не достигнет нужного символа (который будет '\n'
) или не исчерпает пространство ввода / вывода.
Обратите внимание, что для данных, уже находящихся в буфере в памяти, вы, возможно, захотите пропустить этап копирования в отдельный выходной буфер, если только вам не нужно завершать нулем вывод без изменения ввода. Многие начинающие программисты на С часто совершают ошибку, думая , что им нужно нулевое завершение, когда достаточно просто улучшить некоторые из ваших интерфейсов, чтобы получить пару (указатель, длина) , что позволяет вам передавать / обрабатывать подстроки без их копирования. Например, вы можете передать их на printf
используя: printf("%.*s", (int)length, start);