A mi código agregale un (char *) antes del malloc, algo así:
(char *)malloc(....)
El compilador no debería de pedirlo, es extraño.
A mí siempre me ha pedido el
(char*) antes de usar malloc(). Creo (o supongo, no lo sé seguro) que es para que el compilador sepa si lo que quieres que tenga 20 elementos es el vector, o en el caso de las matrices; si hay 20 columnas o 20 filas.
Por otra parte, yo siempre he usado:
variable
= (char *) malloc (20 * sizeof(char));
Creo que es necesario poner también el sizeof(char) para que sepa que tiene que reservar el espacio de 20 char, al menos así lo vi yo por los libros a partir de los que aprendí C.
Saludos!