Вы захотите создать буфер в два раза длиннее самой длинной строки, которую вы будете поддерживать, и вам нужно будет отслеживать состояние вашего буфера.
По сути, каждый раз, когда вас вызывают для новой строки, вы сканируете текущую позицию буфера в поисках маркера конца строки. Если вы найдете один, хорошо, это ваша линия. Обновите указатели буфера и верните.
Если вы нажмете максимальную длину, вы вернете усеченную линию и измените свое состояние на сброс. В следующий раз, когда вам позвонят, вам нужно сбросить до следующего конца строки, а затем войти в нормальное состояние чтения.
Если вы дойдете до конца прочитанного, вам нужно прочитать еще один символ максимальной строки, перенеся его в начало буфера, если вы достигнете дна (то есть вам может потребоваться сделать два вызова для чтения) и затем продолжите сканирование.
Все вышеперечисленное предполагает, что вы можете установить максимальную длину строки. Если вы не можете этого сделать, вам придется работать с динамической памятью и беспокоиться о том, что произойдет, если сбой буфера malloc. Кроме того, вам необходимо всегда проверять результаты чтения на тот случай, если вы достигли конца файла во время чтения в буфер.