Teil aus Zeichenkette ausschneiden



  • Hallo!

    Bin noch ein relativ ungeübter Neuling und habe nun folgendes Problem:
    Ich möchte eine Funktion schreiben, welche aus einem Text einer Zeichenkette ab dem x. Zeichen einen y Zeichen langen Abschnitt als Funktionsergebnis zurückgibt.

    Wenn ich das Programm laufen lasse, bekomme ich immer nur eine Fehlermeldung. Könnte das was mit dem Rückgabewert zu tun haben?

    Hier der Code:

    #include <stdio.h>
    #include <stdlib.h>
    
    char schnitt(int x, int y);
    char text[200]="Hallo wie geht es denn heute so";
    
    int main()
    {
    printf("%s", schnitt(2,6));
    getch();
    }
    
    char schnitt(int x, int y)
    {
    int i;
    char kette[y];
    
    for (i=0; i<y; i++)
    kette[i]=text[x+i];
    
    return (kette);
    }
    


  • Und was für eine Fehlermeldung ist dies???
    Wenn ich deinen Quelltext hier kopiere und kompilieren will hagelt es bei mir nur Fehlermeldungen...



  • Mit der Fehlermeldung meinte ich die von Windows, mein Compiler bringt natürlich auch mehrere hintereinander...



  • Ja hat es, du muss in deiner funktion schnitt() einen pointer auf einen String zurückgeben, denn sonst ist das ein einzelnes Zeichen. also z. b. so:

    #include <stdio.h>
    #include <stdlib.h>
    
    char *schnitt(int x, int y);
    
    char text[200]="Hallo wie geht es denn heute so";
    
    int main()
    {
    
    printf("%s", schnitt(2,6));
    getchar();
    
    return 0;
    }
    
    char *schnitt(int x, int y)
    {
    	int i;
    	char *kette;
    
    	kette=(char *)malloc(sizeof(char)*(y-x+1));
    
    	for (i=0;i<y-x;i++) {
    
    		kette[i]=text[x+i];
    	}
    
    	kette[i]='\0';
    
    return kette;
    }
    

    Ausserdem muss der Speicherplatz bei der deklaration von variablen fest stehen.
    Also muss du den Speicher dynamisch zur Laufzeit allokieren.

    b4sh0r



  • Du könntest es auch ein bisschen anders und mit weniger Aufwand mit memcpy machen. Setz dich damit mal auseinander, wenn du magst. 😃



  • Maffe001 schrieb:

    Du könntest es auch ein bisschen anders und mit weniger Aufwand mit memcpy machen. Setz dich damit mal auseinander, wenn du magst. 😃

    Es geht doch um den Lerneffekt 😃



  • Wie würde das dann mit dieser memcpy-Funktion genau aussehen?
    So wie in meinem Beispiel wohl eher nicht, da stürzt nämlich immer Windows ab...

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    char text[200]="Hallo wie geht es denn heute so";
    char schnitt[180];
    
    int main()
    {
    memcpy(schnitt, text[3], 4);
    printf("%s", schnitt);
    getch();
    }
    


  • Kann es sein, dass du die Warungen deines Compiler ignorierst?

    memcpy(schnitt, text[3], 4);
    

    Das 2. Argument muss ein Zeiger auf char sein. Du übergibst ihm aber ein char. Mach es wenn dann so:

    memcpy(schnitt, text+3, 4);
    


  • Ach ja, es wäre auch noch ganz gut, wenn du dein "schnitt[80]" mit memset() sauber nullen würdest...


Anmelden zum Antworten