string erweitern in for-Schleife
-
Warum willst du eigentlich die ' nicht mit einlesen?
Und wenn dann reicht auch eins davon in der Scanlist.Die '' brauchst du nur, wenn du einzelne Zeichen hast.
Bei scanf steht das aber schon im Formatstring.
-
logisch, \0 wird ja überschrieben, also ist strlen dann sinnlos.
Lösung:
int nummerT1 =strlen(T1); for(i=0;T2[i]!='\0';i++) T1[i+nummerT1]=T2[i];}
scanf:
ja, die ' in scanf sind quatsch
aus:scanf("%[^'\n']",Text1); scanf("%[^'\n']",Text2);
wird:
scanf("%[^\n]",Text1); scanf("%[^\n]",Text2);
Danke!
-
Es fehlt immer noch die abschließende '\0' beim neuen T1.
-
DirkB schrieb:
Es fehlt immer noch die abschließende '\0' beim neuen T1.
Stimmt, die Schleife muss noch ein Mal:
int nummerT1=strlen(T1); int nummerT2=strlen(T2); for(i=0;T2[i]!=nummerT2;i++) T1[i+nummerT1]=T2[i];}
-
Passt immer noch nicht. strlen zählt die Nullterminierung nicht mit. Das heißt deine Schleife kopiert ein Zeichen zu wenig.
-
Nö.
i hat am Ende der Schleife ja schon den richtigen Wert.T1[i+nummerT1] = '\0';
nach der Schleife reicht.
-
DirkB schrieb:
T1[i+nummerT1] = '\0';
nach der Schleife reicht.
Klar reicht das. Aber es fehlt!
-
Sorry, das "Nö" galt Superstar. Ich wurde beim schreiben der Antwort aufgehalten und hatte dein Post nicht gesehen.
-
DirkB schrieb:
Sorry, das "Nö" galt Superstar.
Auweja, jetzt hat man es hier auch schon mit superstarren zu tun.
Drama, baby.
-
EOP schrieb:
superstarren
das bin ich :p
DirkB schrieb:
T1[i+nummerT1] = '\0';
nach der Schleife reicht.
hab ich berücksichtigt, danke
ein weiteres kleines Problem hab ich jetzt leider wieder. Der Code nochmal, so wie er jetzt aussieht:
qheader.h:
#include<stdio.h> int slength(char a[]){ int i; for(i=0;a[i]!='\0';i++); return i;} void scat(char a[],char b[]){ int i=0; int nummerT1=slength(a); int nummerT2=slength(b); for(i=0;b[i]!=nummerT2;i++) a[i+nummerT1]=b[i]; a[i+nummerT1] = '\0'; } int scmp(char a[],char b[]){ int i; if(slength(a)!=slength(b)) return 0; else { for(i=0;a[i]!='\0';i++) { if(a[i]!=b[i]) {return 0; break;} } } return 1;}
Ausgabe.c:
#include<stdio.h> #include</home/sex/Documents/C:/qheader.h> #include<string.h> int main(){ char Text1[100]; char Text2[100]; printf("Bitte Text1 eingeben\n"); scanf("%[^\n]",Text1); getchar(); printf("Bitte Text2 eingeben\n"); scanf("%[^\n]",Text2); scat(Text1,Text2); printf("%s\n",Text1); printf("Die Zeichenlaenge von Text1 ist: %d\n",slength(Text1)); return 0;}
Der Code ist gleicher wie vorher, ist aber halt nur die unformatierte und schwerer lesbare Form mit einer "quasi-header" und den Ersatz von strlen mit meiner slength-Funktion. (Ich habs auch mit strlen ausprobiert und der Fehler verschwand nicht.)Das Programm tut selbiges wie vorher, nur will ich danach die Zeichenlänge für den zusammengefügten Text1-String bestimmen.
printf("Die Zeichenlaenge von Text1 ist: %d\n",slength(Text1));
Das Programm gibt zwar den richtigen, zusammengefügten Text1-String aus und dann die richtige Zeichenlänge, jedoch ist in der dritten Ausgabezeile noch ein "Speicherzugriffsfehler". Das soll nicht erscheinen.
-
Die Bedingung in deiner for-Schleife. Guck die dir nochmal ganz genau an.
P.S.: Darf ich dir einen anderen Einrückungsstil nahelegen? Es ist ungeheuer schwer zu lesen, wo bei dir ein Codeblock anfängt oder aufhört.