char c* = (char *)malloc(DIM * sizeof(char));

in questo modo allochi un array di DIM elementi, ognuno dei quali è un carattere; se vuoi usare l'array come una stringa ricorda che l'ultimo carattere deve essere il carattere di fine string '\0', quindi DIM deve essere 1 in più rispetto alla lunghezza della stringa che ci vuoi memorizzare.

Per riallocare lo spazio precedentemente allocato devi usare la funzione realloc:

c = (char *)realloc(c, 100);

cosi ad esempio riallochi c in modo che punti ad una nuova zona di memoria di 100 locazioni; il vecchio contenuto a cui puntava c viene ricopiato nella nuova locazione; se invece non ti interessa avere il vecchio contenuto usi normalemnte la malloc,