string erweitern in for-Schleife



  • 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];}
    

  • Mod

    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.


  • Mod

    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.


  • Mod

    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.


Anmelden zum Antworten