Классический подход - удваивать буфер каждый раз, когда он слишком мал.
Начните с «разумного» буфера, поэтому вам не нужно делать realloc()
s для размеров 1, 2, 4, 8, 16, которые будут поражены большим количеством ваших строк.
Начало в 1024 байта означает, что у вас будет один realloc()
, если вы нажмете 2048, секунду, если вы нажмете 4096, и так далее. Если безудержное потребление памяти вас пугает, ограничьте скорость роста, когда она достигнет чего-то достаточно большого, например, 65536 байт или чего-то еще, это зависит от ваших данных и толерантности памяти.
Также убедитесь, что вы буферизуете текущую длину, чтобы вы могли выполнить strcpy()
без необходимости сначала ходить по строке, чтобы найти длину.