Yo tengo una duda. Las cadenas de caracteres definidas en el propio código, por ejemplo char *cadena = "Hola" tienen, en este caso, 5 caracteres? Es decir, yo pensaba que era solo cuando se leía de fichero usando por ejemplo getline si tenía el '\0' del fin de linea, pero pensé que en punteros a char declarados en el codigo no pasaba eso.
Es más, yo tenía la idea de que era solo los string a los que le pasaba eso.
Entonces, si se puede, solo hay que hacer dos bucles que, con un puntero auxiliar, p:
int contador = 0;
p = cadena1;
int tope1, tope2;
while ( *p != '\0' ){
p++;
contador++;
}
tope1 = contador;
p = cadena2;
while ( *p != '\0' ){
p++;
contador++;
}
tope2 = contador - tope1;
char *concatenada = ( char * ) malloc ( contador * sizeof(char) );
for ( int i = 0; i < tope1; ++i )
concatenada[i] = cadena1[i];
for ( int i = 0; i < tope2; ++i )
concatenada[tope1 + i] = cadena2[i];
Ya solo basta hacer el printf
Saludos!