Ciao, in un certo senso, è proprio lo scopo dell'allocazione dinamica risolvere questo problema.
Oltre la funzione malloc(), è disponibile la funzione realloc(), che consente di "aumentare" la dimensione dell'array, quindi ti basta tener conto degli elementi letti, e aumentare di un intero la dimensione dell'array ad ogni lettura.
Array=(*int)realloc(Array,(++elementi)*sizeof(int) ); //aumento gli elementi di uno, e calcolo la nuova memoria