Ciao ,se ti può essere utile ? capire bene i puntatori forse è complesso , ma usare un array dinamico nella pratica è abbastanza semplice .
http://www.cplusplus.com/reference/cstdlib/realloc/
codice:
accesso *db=NULL; //puntatore che non punta a nessuna locazione di memoria
int z=0;
while((fgets(buffer,sizeof(buffer), f))!=NULL)
{
z++;
db=(accesso *)realloc(db,sizeof(accesso)*z);
/*se db è NULL , realloc si comporta come malloc ,
successivamente rialloca memoria aumentandola di sizeof(accesso) ,
db si usa come un normale array db[0]
*/
sscanf(buffer,"%d:%d:%d %s %d",&db[z-1].hh,&db[z-1].mm,&db[z-1].ss, &db[z-1].C,&db[z-1].user);
}