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.