Stringconcat
-
Ich danke dir, ich wollte es anders aber ist ja auch schön das ganze so zu lösen.
Ich bekomme es anders nicht hin. Mein Versuch:
#include <stdio.h> #include <stdlib.h> #include <string.h> char *strconcat(char *str1, char *str2){ char *str3; int i, j, k; for(i=0; str2[i] != '\0'; i++) ; for(j=0; str2[j] != '\0'; j++) ; for(k=0; k<i+j; k++){ if(k<i) str3[k]=str1[k]; else str3[k]=str2[k]; } return str3; } int main(void) { char str1[]="Hallo"; char str2[]="Welt"; printf("%s", strconcat(str1, str2)); return 0; }
Beim ausführen: "Segmentation fault"
Was mache ich falsch??
-
char *mystrncata(char *str1, char *str2,int len){ int i,j; for(i=0; str1[i] != '\0'; i++); for(j=0; j<len && str2[j]; ){ str1[i++] = str2[j++]; } str1[i]='\0'; return str1; }
-
@student10
Ich dachte du wolltest eine Funktion, wie strncat? Dein Versuch ist ja eher wie man: strcat.Naja, nun überleg einmal, worauf str3 zeigt und ob es sinnvoll ist da einfach hinzuschreiben (oder bekommst du vielleicht einen segfault, weil du irgend wohin schreibst, wo du nicht hinschreiben sollst?)
In der glibc ist strcat zB so implementiert: http://sourceware.org/git/?p=glibc.git;a=blob;f=string/strcat.c;h=eef22add3637e4fa0bd987d8e9132787e9ba85c6;hb=HEAD
-
Ich wollte das ja eigentlich wie strcat machen. Hatte mich aber verschrieben (das n wollte ich nicht schreiben). strncat ist ja fast gleich.
Mit dem Code geht das:
char *mystrcat(char *str1, char *str2){ int i, j, k; for(i=0; str1[i] != '\0'; i++) ; for(j=0; str2[j] != '\0'; j++) ; for(k=0, i++; k<(i+j) && str2[k]; ){ str1[i++] = str2[k++]; } str1[i]='\0'; return str1; }
Danke euch
-
Das Problem ist jetzt wenn der zweite String länger ist als der erste.
Ausgabe: ....
"Aborted"Edit: Das gleiche Problem hat aber auch strcat. Hab ihr ne Idee wie ich das Problem beheben kann.
-
Du musst str1 groß genug machen. Aus dem Grund gibt es ja extra strncat, damit man strcat sagen kann, wieviel maximal kopiert werden darf. Speicherverwaltung ist in C halt eine Sache um die man sich per Hand kümmern muss.
P.S. Wenn du deinen Code optimieren willst, dann solltest du dir überlegen, ob du überhaupt die Länge des zweiten Strings vorher bestimmen musst.
-
char *strconcat(char *str1, char *str2){ int i, k; for(i=0; str1[i] != '\0'; i++) ; for(k=0; str2[k]; ){ str1[i++] = str2[k++]; } str1[i]='\0'; return str1; } int main(void) { char str1[50]="I'm fine"; char str2[]=" and how are you???"; printf("%s\n", strconcat(str1, str2)); return 0; }
Danke euch.
-
[quote="student10"]
char *strconcat(char *str1, char *str2){ int i, k; for(i=0; str1[i] != '\0'; i++) ; for(k=0; str2[k]; ){ str1[i++] = str2[k++]; } str1[i]='\0'; return str1; }
also
char *strconcat(char *str1, char *str2){ int i, k; //strlen ist hier for(i=0; str1[i] != '\0'; i++) ; //und strcpy ist hier for(k=0; str2[k]; ){ str1[i++] = str2[k++]; } str1[i]='\0'; return str1; }
also
char *strconcat(char *str1, char *str2){ strcat(str1+strlen(str1),str2); return str1; }
Aber strcat ist nicht gleich strncat! Beachte das 'n' und schau ochmal das origiale a.
-
student10 schrieb:
strncat ist ja fast gleich.
na klar
-
Ich hatte mich ja mit strncat verschrieben, ich wollte strcat schreiben, hatte das n aber nicht gesehen. Sorry mein Fehler!!! Muss beim nächsten mal besser hinschauen.
Viele Grüße
-
Dein Problem war, dass du mit i und mit j str2 misst, aber nie str1.