Aquí es una cita del manual de strcat(): "La función strcat() añade la cadena src a la cadena dest, sobrescribiendo el byte nulo ('\ 0') al final de dest, y luego agrega un byte nulo de terminación. Las cadenas no se pueden superponer, y la cadena de dest debe tener suficiente espacio para el resultado ".
El problema aquí es que s1 y s2 apuntan a cadenas estáticas que son "de solo lectura", por lo que si intentas realizar una operación strcat, con una cadena de este tipo en los parámetros, obtendrás un error.
La mejor manera de crear su cadena de hello world aquí es malloc, por lo que podrá contener tanto s1 como s2. Además, no se olvide de agregar una '\ n' al final de su cadena de formato de impresión, de lo contrario, podría sorprenderse.
Aquí está el código que escribiría si fuera tú:
int main()
{
char* s1 = "Hello ";
char* s2 = "World !";
char *s3 = malloc((strlen(s1) + strlen(s2) + 1) * sizeof(char));
/* +1 is for the null terminating character
and sizeof(*s3) is the actual size of a char. */
if (s3)
{
strcat(s3, s1);
strcat(s3, s2);
printf("%s\n", s3);
free(s3); // always free what you alloc when you don't need it anymore.
}
return 0;
}
está utilizando mal strcat. Añade la segunda cadena al final de la primera cadena. La cadena que devuelve es solo una conveniencia. No puede alterar una cadena constante (su s1), es por eso que se bloquea. s1 apunta a la memoria de solo lectura. –
Si todo estaba perfectamente bien, el código no se bloqueará. –
Es posible que desee editar su pregunta, Ashish. Probablemente recibas votos negativos porque dices "aunque todo está perfectamente bien". Sin embargo, es una pregunta muy válida. –