Funktion die einen String zerlegt!



  • 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?


Anmelden zum Antworten