Ключевые слова: malloc, realloc.
Вот прямо пример, не очень качественный, но все же:
www.c.happycodings.com/Data_Structures/code10.html
Тут делается realloc каждый раз, когда читаем новую строчку из stdin, а неплохо бы заранее аллоцировать память чуть бОльшими кусками, и переаллоцировать, соответственно, не каждый раз, а когда место в массиве кончилось.