Allora...
Tu hai detto che a.data è un array di caratteri, un array è sostanzialmente un puntatore alla tua memoria, che punta alla prima posizione di una serie di dati...

quando tu scrivi:

char dato[50];

Il programma alloca in memoria 50 caratteri, e assegna al puntatore "dato" l'indirizzo del primo elemento. A questo punto però hai bisogno di un indice per far "spostare" il puntatore nell'elemento a cui ti riferisci, io ho messo la i per indicare un generico indice all'array. Devi comprendere bene la flessibilità degli array in C per poterla sfruttare appieno, studiati i puntatori, e vedrai che tutto sarà più chiaro....