Hier ist ein Zitat aus dem strcat() Handbuch: „Die strcat() Funktion anhängt zum dest Zeichenfolge, die die src Zeichenfolge, den Null-Byte überschrieben wird ('\ 0') am Ende des dest, und fügt dann ein abschließendes Nullbyte hinzu. Die Zeichenfolgen dürfen sich nicht überlappen, und die Zielzeichenfolge muss genügend Platz für das Ergebnis haben. "
Das Problem hier ist, dass s1 und s2 auf statische Zeichenfolgen zeigen, die "schreibgeschützt" sind. Wenn Sie also versuchen, eine strcat-Operation mit einer solchen Zeichenfolge in den DEST-Parametern auszuführen, erhalten Sie einen Fehler.
Der beste Weg, um Ihre Hallo Welt String hier ist Malloc es so in der Lage sein, sowohl s1 und s2 zu enthalten. Vergessen Sie auch nicht, ein '\ n' am Ende Ihrer PrintF-Format-Zeichenfolge hinzuzufügen, sonst könnten Sie überrascht sein. Hier
ist der Code, den ich schreiben würde, wenn ich Sie wäre:
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;
}
Sie strcat falsch verwenden. Es hängt die zweite Zeichenfolge an das Ende der ersten Zeichenfolge an. Die zurückgegebene Zeichenfolge ist nur eine Annehmlichkeit. Sie können eine konstante Zeichenkette (Ihre s1) nicht ändern, deshalb stürzt sie ab. s1 zeigt auf den Nur-Lese-Speicher. –
Wenn alles in Ordnung wäre, würde der Code nicht abstürzen. –
Vielleicht möchten Sie Ihre Frage bearbeiten, Ashish. Du wirst wahrscheinlich Downvotes bekommen, weil du sagst "selbst wenn alles perfekt ist". Es ist jedoch eine sehr gültige Frage. –