Ecco una citazione dal manuale strcat(): "La funzione strcat() aggiunge la stringa src alla stringa dest, sovrascrivendo alla fine del dest del byte nullo ('\ 0'), e quindi aggiunge un byte null che termina. Le stringhe non possono sovrapporsi e la stringa di destinazione deve avere spazio sufficiente per il risultato. "
Il problema qui è che s1 e s2 puntano a stringhe statiche che sono "di sola lettura", quindi se si tenta di eseguire un'operazione strcat, con una stringa di questo tipo nei parametri dest, si otterrà un errore.
Il modo migliore per creare la stringa di hello world qui è di malloc it in modo che sia in grado di contenere sia s1 che s2. Inoltre, non dimenticare di aggiungere un '\ n' alla fine della stringa del formato printf altrimenti potresti rimanere sorpreso.
ecco il codice avrei scritto se fossi in te:
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;
}
si utilizza strcat sbagliato. Aggiunge la seconda stringa alla fine della prima stringa. La stringa che restituisce è solo una comodità. Non è possibile modificare una stringa costante (il tuo s1), ecco perché si blocca. s1 punta alla memoria di sola lettura. –
Se tutto andava bene, il codice non si arrestava. –
Potresti voler modificare la tua domanda, Ashish. Probabilmente stai ottenendo un downvotes perché dici "anche se tutto va perfettamente bene". È una domanda molto valida, però. –