Ты рядом. В основном вы хотите прочитать куски данных и проверить их на наличие \n
символов. Если вы найдете один, хорошо, у вас есть конец строки. Если вы этого не сделаете, вы должны увеличить свой буфер (т.е. выделить новый буфер в два раза больше первого и скопировать данные из первого в новый, затем удалить старый буфер и переименовать новый буфер как старый - или просто realloc
, если вы находитесь в C), тогда читайте еще немного, пока не найдете окончание.
Если у вас есть конец, текст от начала буфера до символа \n
будет вашей строкой. Скопируйте его в буфер или поработайте над ним на ваше усмотрение.
После того, как вы будете готовы к следующей строке, вы можете скопировать «остаток» ввода поверх текущей строки (в основном сдвиг влево) и заполнить оставшуюся часть буфера данными из ввода. Затем вы идете снова, пока у вас не закончатся данные.
Это, конечно, можно оптимизировать, например, с помощью кольцевого буфера, но этого должно быть более чем достаточно для любого разумного алгоритма с привязкой к io.