creo que es por que en la estructura realmente no estas creando dos char de [30] y [9] realmente solo estas creando un puntero, lo que hiciste es lo mismo que hacer:
Código C++:
Ver originalstruct agenda{
char nombre[];
char telefono[];
} agenda;
o lo mismo que
Código C++:
Ver originalstruct agenda{
char *nombre;
char *telefono;
} agenda;