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

  • 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