Hallo Jason,
leider bin ich nicht mehr so fit, was das Lesen in C angeht (ist schon mehr als 25 Jahre her!). Im Prinzip sollte es so funktionieren:
#include <stdio.h>
typedef struct telefon {
    char imeiNummer[20];
    char bezeichnung[100];
    int speicherInGB;
    double preis;
} handy_t;
int lese_datei( char* fnname, handy_t* feld)
{
    FILE* fp;
    int anzahl;
    int erste_zeile;
    char* ret;
    char zeile[120];
    fp = fopen(fnname, "r");
    if(fp == NULL)
    {
        // Fehler
        return 0;
    }
    erste_zeile = 1;
    anzahl = 0;
    for(;; ++anzahl)
    {
        ret = fgets(zeile, 120, fp);
        if( ret == NULL )
        {  
            break; /* Dateiende erreicht! */
        }
        if(erste_zeile == 0)
        {
            /* hier jetzt den String 'zeile' zerlegen und prüfen */
            if( feld != NULL)
            {
                /* nach erfolgreicher Zuweisung 'feld' um 1 erhöhen */
            }
        }
        else
        {
            erste_zeile = 0;
        }
    }
    fclose(fp);
    return anzahl;
}
int main() {
    char* fname;
    int anzahl;
    handy_t* feld;
    fname = "input.txt"; /*hier den Dateinamen angeben*/
    anzahl = lese_datei(fname, NULL);
    if(anzahl > 0)
    {
        /* Array mit Größe 'anzahl' anlegen*/
        feld = malloc( ...;
        lese_datei(fname, feld); /*zweites mal lesen*/
    }
    else
    {
        /*Fehler !*/
    }
    return 0;
}
an der Stelle 'feld != NULL' kannst Du zwischen dem ersten und zweiten Durchlauf der Funktion unterscheiden. Im ersten Durchlauf passiert nichts und im zweiten werden die Daten bei *feld gespeichert.
Falls noch Fragen sind, so melde Dich bitte.
Gruß Werner