Hier ein Zitat aus dem strcat()-Handbuch: "Die Funktion strcat() hängt den src-String an den dest-String an und überschreibt dabei das Null-Byte (' \0 ') am Ende von dest und fügt dann ein abschließendes Null-Byte hinzu. Die Zeichenketten dürfen sich nicht überlappen, und die Zeichenkette dest muss genügend Platz für das Ergebnis haben."
Das Problem dabei ist, dass s1 und s2 auf statische Strings verweisen, die "read only" sind. Wenn Sie also versuchen, eine strcat-Operation mit einem solchen String in den dest-Parametern durchzuführen, erhalten Sie einen Fehler.
Am besten erstellen Sie Ihre Hallo-Welt-Zeichenkette hier, indem Sie sie malloc, damit sie sowohl s1 als auch s2 enthalten kann. Vergessen Sie auch nicht, ein ' \n ' am Ende Ihres printf-Formatstrings, sonst könnten Sie überrascht werden.
Hier ist der Code, den ich an Ihrer Stelle schreiben würde:
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;
}
2 Stimmen
Sie verwenden strcat falsch. Es hängt die zweite Zeichenkette an das Ende der ersten Zeichenkette an. Die Zeichenkette, die es zurückgibt, ist nur ein Hilfsmittel. Sie können eine konstante Zeichenkette (Ihr s1) nicht ändern, deshalb stürzt es ab. s1 zeigt auf schreibgeschützten Speicher.
14 Stimmen
Wenn alles in Ordnung wäre, würde der Code nicht abstürzen.
1 Stimmen
Vielleicht solltest du deine Frage überarbeiten, Ashish. Du bekommst wahrscheinlich Ablehnungen, weil du sagst "auch wenn alles in Ordnung ist". Die Frage ist aber sehr berechtigt.
2 Stimmen
Danke jason ich kümmere mich nicht um downvotes, solange ich Wissen von euch feinen Leuten erhalte. ich werde euren Rat von nun an befolgen. danke nochmal ihr seid wirklich nett.
1 Stimmen
@ashish: Versuchen Sie, Ihre Fragen richtig zu formatieren, um die richtigen Antworten zu erhalten. Im Bearbeitungsfeld beim Stellen von Fragen gibt es viele Formatierungsschaltflächen. Du bist schon lange genug Mitglied. Wenn du dir nicht die Mühe machst, deine Fragen zu formatieren, wirst du auch jetzt noch Abwertungen bekommen.
0 Stimmen
Sorry Leute, ich entschuldige mich, aber ich war noch nie gut darin, lesbare Codes zu schreiben, aber ich würde sie gerne lernen.vielen Dank an alle.
2 Stimmen
Ich glaube, er bezog sich darauf, den Code in einen Codeblock einzufügen. Wenn Sie einer Frage oder Antwort Code hinzufügen, können Sie den gesamten Code markieren und auf die Schaltfläche "101 010" über dem Textfeld drücken, um ihn schön zu formatieren.
2 Stimmen
Sie sollten String-Literale als const char* deklarieren, dann würde der Compiler Probleme wie dieses für Sie erkennen.