Funktion die einen String zerlegt!
-
Hallo Leute,
ich habe eine Funktion geschrieben, die einen String zerlegt.
Ich stelle Mich gerade zu doof an es genau zu erklären, ich kopiere sie mal hier hinein:char *parts (char *s1, int b, int l) char *parts (char *s1, int b, int l) { int i; for(i=0; i != b; i++) {*s1++;}; if (l > 0) { char *pBuffer = new char[l]; for(i=0; i != l && *s1; i++) {pBuffer[i] = *s1++;}; return pBuffer; } return s1; }Die Funktion tut genau das, was sie tun soll.
Aber wie gebe ich jetzt den Speicher von pBuffer wieder frei?
Hoffe ihr könnt mir helfen
Gruß Light-Guard
-
Na mit delete[] pBuffer
-
Hmmm was soll new char[1] hier?
-
Lies genau, es heisst new char[l].
-
Vor allem kennt C kein new/delete, also doch malloc()/free().
Prinzipiell: Wenn Speicher in einer Funktion reeserviert wird und dieser nach Verlassen der Funktion noch gebraucht wird, dann muss der Caller halt den Speicher freigeben.
Besser ist es imho aber, der Funktion bereits reservierten Speicher zu übergeben.Ausserdem ist die Funktion (wenn ich sie denn richtig verstehe) arg umständlich geschrieben.
-
Also Sinn der Funktion ist es aus einem String einen teil hinaus zu schneiden und aus zu geben.
Der Zeiger s1 Zeigt auf den String.
Die Variable b gibt an, ab welchem Zeichen angefangen werden soll.
Die Variable l gibt an, wie weit gelesen werden soll.parts ("www.c-plusplus.net",4,6) würde also "c-plus" ergeben.
Die Funktion funktioniert also so ähnlich wie der substr Befehl aus der string.h
Entschuldigt bitte meine umständliche art zu erklären ^^Das Problem ist jetzt bloß, das ich nicht weiß wie ich jetzt einen char array mit variabler größe erstelle der nach dem Aufruf der Fuktion wieder frei gegeben wird.
Oder fällt euch eine bessere lösung für diese Funktion ein?Gruß Light-Guard
-
Also ich habe nochmal etwas anderes versucht :
char *pBuffer = new char[l];wurde ersetzt durch
char *pBuffer = "";Jetzt müßte der Speicher doch wieder Freigegeben werden wenn die Funktion verlassen wird oder?
Gruß Light-Guard
-
Light-Guard schrieb:
char *pBuffer = "";Jetzt müßte der Speicher doch wieder Freigegeben werden wenn die Funktion verlassen wird oder?
Gruß Light-Guard
Dadurch zeigst du mit deinem Zeiger auf einen Speicher, der nicht beschrieben werden darf.
Eigentlich wurde dir aber eh schon erklärt, was du machen musst. Wenn du new verwendest, dann gehört am Ende deiner Funktion bzw. dann wenn du sie verlässt noch ein delete gemacht:
char *text = new char[10]; ... delete text; return;
-
#include <stdio.h> char* parts( char* lpszString, int nStart, int nCount, char* lpszBuffer ) { if( !lpszString ) return 0; int i = 0; for( ; i < nCount; ++i ) lpszBuffer[i] = lpszString[nStart+i]; lpszBuffer[i] = '\0'; return lpszBuffer; } int main() { char* lpszString = "Mein toller Schtring"; char szBuf[30]; printf( "%s", parts( lpszString, 5, 4, szBuf )); return 0; }
-
Light-Guard schrieb:
AJ schrieb:
Eigentlich wurde dir aber eh schon erklärt, was du machen musst. Wenn du new verwendest, dann gehört am Ende deiner Funktion bzw. dann wenn du sie verlässt noch ein delete gemacht:
char *text = new char[10]; ... delete text; return;Fast.
char *text = new char[10]; ... delete[] text;Bin aus der Übung; Außerdem ist das Pseudo-Code :p
Gehört aber wie schon erwähnt nach C++.
Richtig, da hin wollte ich es eigentlich schon längst verschieben, aber jetzt hol ich es endlich nach.
-
Dieser Thread wurde von Moderator/in AJ aus dem Forum ANSI C in das Forum C++ verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Hey AJ, was hast du denn mit meinem Post gemacht? Der ist ja vollkommen degeneriert. Und wo ist die Funktion abgeblieben?