C Code optimieren



  • Hallo, nicht falsch verstehen. Ich will nicht das jemand mir Code schreibt 😃
    Ich habe hier eine Funktion geschrieben. Diese soll n Zeichen einer Zeichenkette ausgeben. Das ganze funktioniert auch. Doch ist der Code auch gut?
    Was würdet ihr anders machen?

    char* right(char* s, int a)
    {
    /*
        Beschreibung: Liefert den rechten Teil
                  einer Zeichenkette
    */
        int b=0;
        int l;
        char *t=(char*)malloc(a*sizeof(char));
    
        l=len(s)-a; /*len() ermittelt Länge der Zeichenkette (eigene Funktion)*/
    
        while(s[b])
        {
            /*Hier wird das Zeichen kopiert*/
            t[b]=s[l+b];
            b++;
        }
    
        t[b]='\0';
    
        return t;
    }/*right()*/
    


  • Hätte es so gemacht.

    char* right(char* s, int a)
    {
       a=strlen(s)-a;
       while(a)
        {
          s++;
          a--;
        }
        return s;
    }
    


  • Hallo. Ich würde hier nicht viel optimieren wollen. Vielmehr sollten C-Funktionen Verwendung finden:

    char *right(char *s, int n)
    {
        return s+strlen(s)-n;
    }
    

    Diese Fassung liefert schlichtweg einen Zeiger auf den gewünschten Bereich. Der Aufrufer kann dann alles weitere erledigen. Wenn tatsächlich Bytes kopiert werden müssen, kann man das z.B. so machen:

    char *right(char *s, int n)
    {
        char *t = malloc(n+1);
    
        /* Fehlerprüfung von t! */
        return strcpy(t, s+strlen(s)-n);
    }
    

    Wobei es meist zu 'undurchsichtigen' Programmen führt wenn Speicher in einer Funktion reserviert wird der aber ganz wo anders freigegeben werden muss.

    [ Dieser Beitrag wurde am 22.06.2003 um 22:39 Uhr von mady editiert. ]



  • Das mit dem Speicher reservieren. Sollte man das umgehen in dem man die Funktion evt so umändert:

    void right(char* ziel, char* quelle, int i);

    so das Speicher praktisch im Hauptprogramm reserviert werden muss.


Anmelden zum Antworten