Dado que la 'a' no cambia, "while(*a)" dará bucle infinito.
Puedes poner, en su lugar: "while(*q) ++q;".
Además, si quieres usarlo para otros tipos, deberías poner: "return (q-p)/sizeof(char);". Claro que en este caso, al ser char, no tiene mucho sentido jaja
En todo caso yo quitaría la variable 'p', que sobra. En vez de "return q-p;", poner "return q-a;".