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...