Forse c'è un problema nella realloc ,manca un parametro puntatore
result=(char*)realloc(dim*sizeof(char));

per quanto riguarda usare i char , con un char puoi rappresentare numeri fino a 255

un char occupa un byte , è usato molto in questo modo , nella programmazione
microcontrollori ,dove la memoria ram è di pochi byte e quindi bene risparmiarla il piu
possibile , se si può

su un pc da 4 GB di ram , lo trovo inutile !