Para el manejo de cadenas, requieres de que el ultimo elemento del array sea '\0' para que no se desborden las varibles y no haga comportamientos raros
Código:
char cad_relleno[resto+1];
char cad_final[tamano+1];
Por lo general prefiero emplear el memset con sizeof si es para limpiar el array
Código:
memset (cad_relleno,'\0',sizeof(cad_relleno));
memset (cad_final,'\0',sizeof(cad_final));
Con esto aseguras que no se desborde el array