Los problemas que tienes son los siguientes:
- No inicializas las cadenas por lo que tienen basura y por eso te aparecen caracteres extraños.
En el ejemplo que te puse solo usé strcat() para que vieras su uso pero si la cadena no está inicializada hay que usar primero strcpy() para copiar el contenido y borrar la posible basura que haya y luego ya strcat().Código (c) [Seleccionar]
int main(){
char frase[] = "Hola";
int n = 3;
char fraseN[strlen(frase) * n + 1]; // Se suma 1 para el caracter final '\0'
strcpy(fraseN, frase); // Copias el contenido de frase en fraseN eliminando la basura que pudiera tener
for(int i = 1; i < n; ++i){ // Empiezas el contador en 1 en vez de en 0 para no concatenar el contenido una vez mas
strcat(fraseN, frase); // Elimina el '\0', concatena la cadena e incluye otro '\0' al final
}
printf("%s\n", fraseN); // Resultado: HolaHolaHola
} - En las líneas 72 y 73 no puedes usar strlen() porque esto te devuelve la longitud que tiene la cadena y no tienes ninguna cadena guardada. Lo que necesitas es que te devuelva la capacidad total del array y eso se consigue con sizeof().
- En la línea 73 tienes que multiplicar por n2, no por n.
- Las líneas 89-93 son innecesarias pues estás haciendo lo mismo que en las líneas 77-81.