A rieccome, mi avete chiamato vero?

Ecco come ho pensato di trovare l'ingresso e uscita dell'utente e memorizzarla nella struttura:
codice:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

typedef struct{
int hh, mm, ss;
int hhI, mmI, ssI;
int hhU, mmU, ssU;
char C;
int user;
}accesso;



void carica_dati(char filename[]){
FILE *f;
char buffer[128];
f = fopen(filename, "r");
if(f==NULL)    
    {
    perror("Errore apertura file");
    exit(1);    
     }
else
    {
    int z = 0;
    while((fgets(buffer, sizeof(buffer), f))!=NULL)
        z++;     
    accesso db[z];
    accesso dbIU[z];
    int d, G;
    for(d=0; d<z; d++) {
    sscanf(buffer, "%d:%d:%d %c %d", &db[d].hh, &db[d].mm, &db[d].ss, &db[d].C, &db[d].user); 
    for(d=0; d<z; d++) {
    G=0;
    while(db[d].user!=db[G].user)
    G++;
    if(db[G].C=='U'){
    dbIU[d].hhI = db[d].hh;
    dbIU[d].mmI = db[d].mm;
    dbIU[d].ssI = db[d].ss;
    dbIU[d].hhU = db[G].hh;
    dbIU[d].mmU = db[G].mm;
    dbIU[d].ssU = db[G].ss;
    dbIU[d].user = db[d].user;
    }
    else
    {
    dbIU[d].hhI = db[G].hh;
    dbIU[d].mmI = db[G].mm;
    dbIU[d].ssI = db[G].ss;
    dbIU[d].hhU = db[d].hh;
    dbIU[d].mmU = db[d].mm;
    dbIU[d].ssU = db[d].ss;
    dbIU[d].user = db[d].user;
    }
    
/*    printf("%d:%d:%d %c %d\n", db[d].hh, db[d].mm, db[d].ss, db[d].C, db[d].user);   */
               }
    for(G=0; G<z; G++)
    printf("I%d:%d:%dU%d%d%d %d\n", dbIU[G].hhI, dbIU[G].mmI, dbIU[G].ssI, dbIU[G].hhU, dbIU[G].mmU, dbIU[G].ssU, dbIU[G].user); 
    
        
    fclose(f);
     }
   } 
}



int main(int argc, char *argv[])        
{
    carica_dati(argv[1]);    
    
    
    
    
    
return 0;
}
A quanto pare alla compilazione il computer non è esploso e non mi ha dato errori, però eseguendolo la printf spara roba assurda non passerò mai questo esame