Verketten von zwei char* - strings in einen C-Programm
Schrieb ich das folgende C-Programm:
int main(int argc, char** argv) {
char* str1;
char* str2;
str1 = "sssss";
str2 = "kkkk";
printf("%s", strcat(str1, str2));
return (EXIT_SUCCESS);
}
Möchte ich zum verketten von zwei strings, aber es funktioniert nicht.
- Sie sind nicht die Zuweisung einer Ziel-Puffer von ausreichender Größe und zu schreiben versucht, um nicht änderbaren Speicher.
- Wenn Sie sagen "es funktioniert nicht?", was meinst du? Was ist es, Druck statt, was es soll? Auch wenn es ziemlich offensichtlich ist, sollten Sie auch sagen was Sie denken, es sollte zu drucken, um deutlich zu machen.
- sehen Sie, diese Frage Mit strcat in C
- mögliche Duplikate von strcpy und strcat verursachen manchmal Probleme
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die Weise, die es funktioniert, ist:
free (str3);
Hier ist ein Beispiel für Sie, spielen Sie mit. Es ist sehr einfach und hat keine hart-codierten Längen. Du kannst es noch hier versuchen: http://ideone.com/d3g1xs
Sehen dieser Beitrag für Informationen über die Größe der char
str3 = "sssss"
undstrcpy(str3,str1)
?char * str3 = (char *) malloc(1 +sizeof(char*) * (strlen(str1)+ strlen(str2)));
Warum nichtstr3 = "sssss"
aber verwendenstrcpy(str3,str1)
statt?:)sizeof(char)
ist sinnlos (und nicht ratsam).sizeof(char)
ist immer garantiert zu 1. Also, Multiplikation mit, es ist sinnlos.char * str3 = (char *) malloc(1 + strlen(str1)+ strlen(str2) );
. Sie benötigen die(char *)
?malloc
verwirrt mich, wenn Sie Lust haben.Hier ist eine funktionierende Lösung:
Ausgabe:
Sie Speicher für Ihre Saiten. In dem obigen code, ich erkläre
str1
undstr2
als Zeichen-arrays mit 16 Zeichen. Ich verwendetstrcpy
zu kopieren Zeichen von string-literalen in Sie, undstrcat
die Zeichen anfügen vonstr2
zu Endestr1
. Hier ist, wie diese Zeichen, die arrays sehen wie während der Ausführung des Programms:strcat
concatsstr2
aufstr1
Erhalten Sie Laufzeitfehler, weil
str1
wird nicht richtig zugeordnet, für Verkettungstrcat
zurück die verkettete Zeichenfolge.Wenn Sie string-Literale, wie
"this is a string"
- und in Ihrem Fall"sssss"
und"kkkk"
, der compiler setzt Sie in nur-lese-Speicher. Allerdingsstrcat
zu schreiben versucht, das zweite argument nach der ersten. Sie können dieses problem lösen, indem Sie ein ausreichend großes Ziel-Puffer und schreiben.Beachten Sie, dass in den letzten Compilern, Sie erhalten in der Regel eine Warnung für die casting-string Literale nicht-const-Zeichen Zeiger.
strcat(str1, str2)
fügt str2 nach str1. Es erfordert str1, um genügend Platz zu halten str2. In dem code, str1 und str2 sind alle string-Konstanten, so sollte es nicht funktionieren. Sie können versuchen, auf diese Weise:strcat
versucht, hängen Sie den zweiten parameter der ersten. Das wird nicht funktionieren, da du bei der Zuweisung implizit große Konstante Zeichenfolgen.Wenn alles, was Sie tun möchten ist, drucken Sie zwei strings aus
Tun würde.
Könnten Sie etwas tun, wie
erstellen Sie eine verkettete Zeichenfolge; jedoch stark erwägen, "strncat" /strncpy statt. Und Lesen Sie die man-Seiten, die gezielt für die oben genannten. (oh, und vergessen Sie nicht
free
str1 am Ende).str1="ssss"
undstrcpy(str1,"ssss")
?