Могу ошибаться, но обычно выделяется буфер определённого фиксированного размера, допустим на 256 символов. Далее буфер заполняется строкой. В случае с C-строкой все отлично - она терминируется символом \0 и бОльший размер буфера не помеха. В процессе заполнения буфера, определяем свободное пространство в буфер и по необходимости либо выделяем дополнительный буфер и организуем работу с несколькими, либо выделяем больший буфер и копируем в него содержимое старого.