Solo tengo una duda en la respuesta de leosansan, el código funciona, pero ¿Por qué le restas 1 en la parte de frase3[letra2 - 1]? Eso es lo único que no entiendo
Es debido al uso del operador secuencial ",". Su comportamiento dada la expresión:
frase2[letra2++] = frase1[letra1] , frase3[letra2 - 1] = frase1[letra1];
Es el siguiente:
1) Se evalúa la expresión a la izquierda, esta es "frase2[letra2++] = frase1[letra1]" y su resultado se descarta.
2) Todos los efectos laterales del paso 1 se aplican: el valor de la variable "letra2" se incrementa en una unidad.
3) Se evalúa la expresión a la derecha, esta es "frase3[letra2 - 1] = frase1[letra1]". El punto importante aquí es que el valor de "letra2" ya se incremento en una unidad y ahora es el indice del siguiente carácter, por ello se le resta una unidad.
Ya que la idea es copiar la cadena en dos arrays otra opción mas sencilla y con el mismo efecto es:
frase3[letra2] = frase2[letra2] = frase1[letra1];
letra2++;
Un saludo