En efecto, suponiendo que el código de insertarSub sea correcto (no le he revisado a fondo), el problema es que la declaración
informa al compilador que reserve en micad1 el espacio justo para la cadena "hola". Y por cierto que, si mi memoria no me falla, esta declaración implica además que la cadena declarada es tipo "const char *", es decir, una cadena constante cuyo contenido no puede ser cambiado (!!)
Entonces, ¿cómo vas a insertar una cadena dentro de micad1, si esto implica alterarla? No puedes.
Debes modificar la declaración de micad1, pudiendo quedar más o menos de este modo:
Código C++:
Ver originalchar micad1[100]; /* espacio suficiente */
ahora cad1 no será una cadena constante, y además contendrá el espacio que necesita para lo que quieres hacer. Pruébalo y comenta .....